Una verificación de si es la página principal, si tiene hijos, si tiene nietos

10

Tengo una plantilla de página predeterminada que deseo usar para dos escenarios. Prefiero usar solo una plantilla de página por simplicidad para mi cliente.

Esto es lo que estoy tratando de lograr:

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
}

es posible?

Esto es lo que he probado hasta ahora:

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

Funciona tanto como en las páginas de nivel superior, muestra diseños de ancho completo. Pero, ¿qué puedo hacer para asegurarme de que el diseño del menú de la barra lateral se muestre en páginas secundarias con hijos y solo en páginas grandchile? Y para páginas secundarias sin hijos, para mostrar el diseño de ancho completo.

Gracias por adelantado. Estoy seguro de que tiene una solución simple, soy relativamente nuevo en WP, así que todavía estoy tratando de descubrir qué puede y qué no se puede hacer.

laura.f
fuente

Respuestas:

7

Antes de leer la solución proporcionada por Bravokeyl, finalmente, a través de prueba y error, encontré una solución que funcionó para mí. No estoy seguro de cuál es el mejor de los dos, o el más correcto, solo sé que el mío funcionó para mí, por el problema que tuve.

Este es el código que usé para mostrar el diseño de ancho completo o el diseño del menú de la 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
}
laura.f
fuente
4
Level-0
--Level-1
----Level-2
------Level-3
----Levelanother-2
--Levelanother-1

comprobar si la página es de nivel superior (puede tener hijos o no)

$post->$post_parent == 0o está vacío, get_post_ancestors( $post )solo devuelve páginas de nivel 0.

¿Es una página secundaria y es solo una página de Nivel 1 o Levelanother-1?

$post->$post_parent > 0o no está vacío get_post_ancestors( $post )y está vacíoget_post_ancestors( $post->post_parent )

¿Es la página de nivel 1 pero no tiene hijos como la página Levelanother-1?

$post->$post_parent > 0o no está vacío get_post_ancestors( $post )y está vacío get_post_ancestors( $post->post_parent ) y count(get_children( $post ->ID, 'ARRAY_A' )) == 0...

No he comprobado esto todavía ... pero debería funcionar bien. También puedes jugar con get_page_children () y get_posts ()

bravokeyl
fuente
Gracias bravokeyl Esa solución funcionó para mí. Después de muchas pruebas y errores (principalmente errores), hoy se me ocurrió una solución propia antes de leer su respuesta. Lo publicaré a continuación.
laura.f
¡Excelente! Has encontrado la solución.
bravokeyl