Mostrar contenido si la página padre tiene hijos

22 nov 2012, 15:16:25
Vistas: 23.4K
Votos: 3

Usando este fragmento de código puedes mostrar contenido dependiendo si es una página hija o no:

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Esta es una página hija.

<?php else : ?>
Esta es una página padre.

<?php endif; ?>

Pero me gustaría agregar una condición más, para poder tener contenido diferente si es una página padre que tiene hijos, o una página padre que no los tiene. ¿Funcionaría algo como esto de abajo? Si es así, ¿qué debería ser "XXX"?

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Esta es una página hija.

<?php elseif ( is_page() && XXX ) : ?>
Esta es una página padre (con uno o más hijos)

<?php else : ?>
Esta es una página padre sin hijos.

<?php endif; ?>

¡Gracias de antemano!

0
Todas las respuestas a la pregunta 3
0

Terminé usando este código:

<?php
global $post;
$children = get_pages( array( 'child_of' => $post->ID ) );

if ( is_page() && $post->post_parent ) : ?>
Esta es una página hija.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Esta es una página padre (con uno o más hijos)

<?php else : ?>
Esta es una página padre sin hijos.

<?php endif; ?>
22 nov 2012 18:54:53
3

También podrías crear tu propia etiqueta condicional. En functions.php añade:

function my_is_parent() {
    global $post;

    $children = get_pages('child_of='.$post->ID);
    if( count( $children ) > 0 ) {
        $parent = true;
    }

    return $parent;
}

Y en tu IF en lugar de XXX añade: my_is_parent()

Por supuesto, podrías nombrarla de otra forma en lugar de "my_is_parent" si lo prefieres. No estoy seguro de esta parte, pero supongo que no sería muy a prueba de futuras actualizaciones usar "is_parent" por si algún día se incluye en el núcleo de WordPress.

22 nov 2012 15:55:23
Comentarios

¿No debería esto devolver $parent = true, un valor booleano en lugar de texto?

Trevor Trevor
8 sept 2015 04:51:07

@Trevor sí, tienes razón. Aunque funciona con el valor de texto también, pero actualicé esta respuesta de hace 3 años ahora :)

jzatt jzatt
8 sept 2015 11:04:49

Sigue siendo una respuesta válida 7 años después.

Clarus Dignus Clarus Dignus
14 abr 2019 16:21:53
2

puedes lograr eso usando

global $post;

$args = array (
    'parent' => $post->ID
);

$children = get_pages( $args );

if ( is_page() && $post->post_parent ) : ?>
Esta es una página hija.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Esta es una página padre (con uno o más hijos)

<?php else : ?>
Esta es una página padre sin hijos.

<?php endif; ?>

y usando count( $children ) > 0 en lugar de tu XXX

22 nov 2012 15:33:41
Comentarios

¿Podrías mostrar el código completo? ¡Gracias!

nicolas nicolas
22 nov 2012 16:01:49

Hola @nicolas, he completado el código completo para ti.

fischi fischi
22 nov 2012 18:17:10