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


10

Eu tenho um modelo de página padrão que desejo usar para dois cenários. Prefiro usar apenas um modelo de página por uma questão de simplicidade para o meu cliente.

Aqui está 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?

Isto é o que eu tentei até agora:

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

Funciona até nas páginas de nível superior e exibe layouts de largura total. Mas, o que posso fazer para garantir que o layout do menu da barra lateral seja exibido nas páginas filhas com crianças e somente nas páginas de netos? E para páginas filho sem filhos, para exibir o layout de largura total.

Desde já, obrigado. Tenho certeza de que tem uma solução simples, sou relativamente novo no WP e ainda estou tentando descobrir o que pode e o que não pode ser feito.

Respostas:


7

Antes de ler a solução fornecida pela Bravokeyl, finalmente, por tentativa e erro, encontrei uma solução que funcionou para mim. Não tenho certeza de 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 eu 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
}

4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

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

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

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

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

A página do nível 1 é mas não tem filhos como a página Levelanother-1?

$post->$post_parent > 0ou 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..

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


Obrigado bravokeyl. Essa solução funcionou para mim. Depois de muitas tentativas e erros (principalmente erros), criei uma solução própria hoje cedo antes de ler sua resposta. Vou postar isso abaixo.
Laura.f 25/03

Ótimo! você encontrou solução.
bravokeyl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.