Uma verificação de se é página pai, se tem filhos, se tem netos

9

Eu tenho um modelo de página padrão que desejo usar em dois cenários. Eu prefiro usar apenas um modelo de página para simplificar o meu cliente.

Veja o que estou tentando realizar:

if parent_page OR if child-page without children {
  display full-width-layout
}
if child page with children or if grandchild page {
  display sidebar-menu-layout
}

Isso é possível?

Isso é o que eu tentei até agora:

if( is_page() && $post->post_parent > 0 ) {
  //display sidebar-menu-layout
} else {
  //display full-width-layout
}

Funciona tanto quanto em páginas de nível superior, exibe layouts de largura total. Mas, o que posso fazer para garantir que o layout do menu da barra lateral seja exibido apenas em páginas-filho com filhos e em páginas grandiosas? E para páginas filho sem filhos, para exibir o layout de largura total.

Obrigado antecipadamente. Tenho certeza que tem uma solução simples, eu sou relativamente novo no WP, então ainda estou tentando descobrir o que pode e o que não pode ser feito.

    
por laura.f 23.03.2015 / 17:04

2 respostas

6

Antes de ler a solução, Bravokeyl, desde que eu finalmente, por tentativa e erro, encontrei uma solução que funcionou para mim. Não tenho certeza qual é o melhor dos dois, ou o mais correto, só sei que o meu funcionou para mim, para o problema que tive.

Este é o código que usei para exibir o layout de largura total ou o layout do menu da barra lateral:

if( is_page() && $post->post_parent > 0 ) { 
  // post has parents

  $children = get_pages('child_of='.$post->ID);
  if( count( $children ) != 0 ) {
    // display sidebar-menu layout
  }

  $parent = get_post_ancestors($post->ID);
  if( count( $children ) <= 0  && empty($parent[1]) ) {
    // display full-width layout
  } elseif ( count( $children ) <= 0  && !empty($parent[1]) )  {
    // display sidebar-menu layout
  }

} else {
  // post has no parents
  // display full-width layout
}
    
por laura.f 25.03.2015 / 22:12
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

verifique se a página é de nível superior (pode ter filhos ou não)?

$post->$post_parent == 0 ou está vazio get_post_ancestors( $post ) retorna apenas páginas de nível-0.

É uma página filha e é uma página de nível 1 ou Levelanother-1 apenas?

$post->$post_parent > 0 ou não está vazio get_post_ancestors( $post ) e está vazio get_post_ancestors( $post->post_parent )

É a página de nível 1, mas não tem crianças como a página Levelanother-1?

$post->$post_parent > 0 ou não está vazio get_post_ancestors( $post ) e está vazio get_post_ancestors( $post->post_parent ) e count(get_children( $post ->ID, 'ARRAY_A' )) == 0 ..

Eu não chequei isso ainda ... mas deve funcionar bem. Você também pode jogar com get_page_children () e get_posts ()

    
por bravokeyl 23.03.2015 / 21:16