bueno estoy realizando un proyecto en wordpress, y mirando mirando ví este post que parece bastante interesante y clarificador, es decir muy claro. No se si funciona etc... lo cuelgo para ilustraros.
por
Nekko. Emprendedora incansable, fundadora de SummArg y de SiteFun.
Estaba
trabajando en un projecto en el que tenía que ingeniarmelas para
colocar en el menú de cabecera las páginas hijas y las páginas padre,
con sus respectivos condicionales para el caso de que no existieran
subpáginas de un item. Afortunadamente me encontré con el blog de
Gabriel Svennerberg en donde llegó a elaborar un código muy prolijo que pude utilizar para mi proyecto.
Este contenido está extraido del mencionado
blog.
Chequear si la página tiene subpáginas
En primer lugar busqué un método en el
codex de
WordPress
que ayude a determinar si la página actual tiene o no subpáginas, al no
encontrarlo elaboré un modo de hacerlo. Básicamente se trata de llamar a
las páginas hijas utilizando
wp_list_pages() y ver si devuelve algo. No es lindo pero funciona.
$children = wp_list_pages('&child_of='.$post->ID.'&echo=0');
if($children) {
// Si esta página contiene subpáginas...
}
Chequear si es una página padre o una subpágina
Lo
siguiente que tuve que resolver fue el chequeo para conocer si la página
actual es una página padre o es una subpágina. Esto se puede realizar
con el siguiente código:
if(is_page() && $post->post_parent) {
// Si es una subpágina
} else {
// Es página padre
}
Cargando el submenu
Ahora necesitaba una forma de cargar las subpáginas. Esto se puede hacer utilizando la función
wp_list_pages().
La parte complicada de esto es que no existe un modo para obtener la
página padre y las subpáginas en una misma llamada, así que hay que
llamar a la función dos veces y con ligeros cambios cada vez.
if(is_page() && $post->post_parent) {
// Si es una subpágina
$children = wp_list_pages("title_li=&include=".$post->post_parent ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->post_parent ."&echo=0");
} else if($has_subpages) {
// Es una página contiene subpáginas
$children = wp_list_pages("title_li=&include=".$post->ID ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->ID ."&echo=0");
}
Hay otros modos de hacer esto, pero el beneficio de este método
es que automáticamente obtenemos class=”current_page_item” en el item
que representa la página en la que actualmente estamos, lo cual es útil
si queremos darle un estilo en particular.
Salida a HTML
El último paso consiste en imprimir el HTML, para lo que elegí una lista desordenada.
<?php // Chequear que haya algo para mostrar ?>
<?php if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
Colocando todo junto
Ahora es tiempo de colocar todas las piezas juntas. Este código puede colocarse en cualquiera de las secciones de tu
theme.
<?php
$has_subpages = false;
// Chequea para ver si la página actual tiene subpáginas
$children = wp_list_pages('&child_of='.$post->ID.'&echo=0');
if($children) {
$has_subpages = true;
}
// Reseting $children
$children = "";
// Llama a los items dependiendo si es una subpágina o página padre
if(is_page() && $post->post_parent) {
// Si es una subpagina
$children = wp_list_pages("title_li=&include=".$post->post_parent ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->post_parent ."&echo=0");
} else if($has_subpages) {
// Si es una página padre que tiene subpáginas
$children = wp_list_pages("title_li=&include=".$post->ID ."&echo=0");
$children .= wp_list_pages("title_li=&child_of=".$post->ID ."&echo=0");
}
?>
<?php // Chequea que exista algo que mostrar ?>
<?php if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>