Mostrare contenuto se la pagina genitore ha pagine figlie

22 nov 2012, 15:16:25
Visualizzazioni: 23.4K
Voti: 3

Utilizzando questo pezzo di codice puoi mostrare contenuti diversi a seconda che sia una pagina figlia o meno:

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Questa è una pagina figlia.

<?php else : ?>
Questa è una pagina genitore.

<?php endif; ?>

Ma vorrei aggiungere un'altra condizione, in modo da poter avere contenuti diversi se è una pagina genitore che ha una pagina figlia, o una pagina genitore che non ne ha. Funzionerebbe qualcosa come questo sotto? Se sì, cosa dovrebbe essere "XXX"?

<?php
global $post;

if ( is_page() && $post->post_parent ) : ?>
Questa è una pagina figlia.

<?php elseif ( is_page() && XXX ) : ?>
Questa è una pagina genitore (con una o più pagine figlie)

<?php else : ?>
Questa è una pagina genitore senza pagine figlie.

<?php endif; ?>

Grazie in anticipo!

0
Tutte le risposte alla domanda 3
0

Alla fine ho utilizzato questo codice:

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

if ( is_page() && $post->post_parent ) : ?>
Questa è una pagina figlia.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Questa è una pagina genitore (con una o più pagine figlie)

<?php else : ?>
Questa è una pagina genitore senza figli.

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

Puoi anche creare il tuo conditional tag personalizzato. In functions.php aggiungi:

function my_is_parent() {
    global $post;

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

    return $parent;
}

E nel tuo IF invece di XXX aggiungi: my_is_parent()

Ovviamente puoi chiamarla diversamente da "my_is_parent" se preferisci. Non sono sicuro di questo aspetto, ma immagino che non sia molto "future proof" usare "is_parent" nel caso un giorno venga incluso nel core.

22 nov 2012 15:55:23
Commenti

Non dovrebbe restituire $parent = true, un valore booleano invece del testo?

Trevor Trevor
8 set 2015 04:51:07

@Trevor hai ragione. Anche se funziona anche con il valore di testo, ho aggiornato questa risposta di 3 anni fa ora :)

jzatt jzatt
8 set 2015 11:04:49

Risposta ancora valida dopo 7 anni.

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

puoi ottenere questo risultato utilizzando

global $post;

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

$children = get_pages( $args );

if ( is_page() && $post->post_parent ) : ?>
Questa è una pagina figlia.

<?php elseif ( is_page() && count( $children ) > 0 ) : ?>
Questa è una pagina genitore (con uno o più figli)

<?php else : ?>
Questa è una pagina genitore senza figli.

<?php endif; ?>

e utilizzando count( $children ) > 0 invece del tuo XXX

22 nov 2012 15:33:41
Commenti

Potresti mostrarmi il codice completo? Grazie!

nicolas nicolas
22 nov 2012 16:01:49

Ciao @nicolas, ho inserito il codice completo per te.

fischi fischi
22 nov 2012 18:17:10