Controllare se si è in una pagina figlia di una pagina specifica

24 nov 2014, 04:59:44
Visualizzazioni: 39K
Voti: 16

Sto cercando di mostrare un logo diverso a seconda della pagina che viene visualizzata.

<?php 
// Verifica se è la pagina home, servizi o una sottopagina di servizi
if ( is_page('home') || is_page('services') || is_page_template('services') || $post->post_parent == get_page_by_path('services')->ID ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 
else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="http://websiteaddress.com">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="Logo del sito" title="Logo principale"></a>
            </h1>
    </div>
<?php } ?>

Il codice sopra funziona bene, ma come posso applicare il cambio del logo anche nelle sotto-pagine di 'servizi'?

0
Tutte le risposte alla domanda 7
1
16

Puoi farlo con $post->post_parent. Dovrai verificare se il genitore della pagina figlia è la pagina Servizi. Ecco come puoi verificarlo.

Ho ipotizzato che 123 nel codice seguente sia l'ID della pagina dei tuoi servizi. Sostituiscilo con l'ID effettivo.

if ( 123 == $post->post_parent ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php }
24 nov 2014 07:02:47
Commenti

Nota solo che questo non funzionerà per i discendenti (cioè, due sottopagine più in basso), anche se secondo me è comunque una risposta migliore di quella selezionata.

Nathan Nathan
25 mag 2017 22:21:48
1

Puoi ottenere la pagina del Post / nome del post utilizzando questo metodo.

$parent = array_reverse(get_post_ancestors($post->ID));
$page_parent = get_post($parent[0]);
echo $page_parent->post_name;

puoi utilizzare la condizione in base alle tue esigenze.

24 nov 2014 07:16:08
Commenti

Per favore formatta correttamente il tuo codice prima di pubblicare.

Robert hue Robert hue
24 nov 2014 07:18:39
0
<?php 
global $post;

// Mostra il logo in formato testo per la pagina home o servizi
if ( is_page('home') || is_page('services') ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php } 

// Mostra il logo in formato testo anche per le pagine di servizi (URL che iniziano con "service")
elseif ( preg_match( '#^service(/.+)?$#', $wp->request ) ) { ?>
    <div class="col-md-2 col-sm-4">
        <?php ci_e_logo('<h1 class="logo ' . get_logo_class() . '">', '</h1>'); ?>
    </div>
<?php
}

// Per tutte le altre pagine mostra il logo in formato immagine
else { ?>
    <div class="col-md-2 col-sm-4">
        <h1 class="logo imglogo">
            <a href="<?php echo esc_url( home_url( '/' ) ); ?>">
                <img src="<?php echo get_bloginfo('template_directory');?>/images/picturehere.png" alt="Logo del sito" title="Torna alla homepage"></a>
            </h1>
    </div>
<?php } ?>
27 nov 2014 15:12:44
0

Come nella risposta di Robert Hue, questa soluzione ti fornirà l'ID dell'elemento genitore:

echo get_post_field( 'post_parent' );

Il secondo parametro è opzionale e può contenere un ID (per quando sei al di fuori del loop o vuoi interrogare il genitore di un elemento specifico)

$post_ID = 666;
echo get_post_field( 'post_parent', $post_ID );

Questa funzione può ottenere qualsiasi campo dalla tabella dei post, come lo slug, lo stato, il tipo... vedi la documentazione per tutti i campi disponibili.

Nel tuo caso la funzione sarebbe così:

if ( get_post_field( 'post_parent' ) === 9 ) :
    //figlio della pagina con ID 9
endif;
7 apr 2017 12:10:01
0

Prova questo

if ( wp_get_post_parent_id( get_the_ID() ) != 0 ) {
    echo 'Sono una pagina figlia';
    // il tuo codice
}
30 mag 2021 01:16:11
2

Utilizza get_post_ancestors($post). Restituirà un array se il post attualmente visualizzato è figlio della tua pagina genitore.

24 nov 2014 05:12:11
Commenti

Grazie per la rapida risposta. Potresti chiarire come potrei implementare questo utilizzando o modificando il codice che ho attualmente?

user1752759 user1752759
24 nov 2014 05:15:28

Non credo che questo risolverà il problema poiché questa funzione get_post_ancestors() restituisce solo un array di pagine figlie. È utile per verificare se una pagina ha pagine figlie.

Robert hue Robert hue
24 nov 2014 07:18:06
1


$post_current = get_post();

$args = array(
        'post_parent' => $parent_id, // l'ID del genitore
        'posts_per_page' => -1,
        'post_type' => 'page',

);
$children = get_posts($args);

$is_child = false;

foreach ($children as $f) {
    if ( $f->ID == $post_current->post_parent ) {
        // è un figlio
        $is_child = true;
        break;
    }
}

if ($is_child) {
    // È un figlio...
} else {
    // Non è un figlio...
}

17 nov 2016 16:31:25
Commenti

Ti consiglio di fornire alcune informazioni aggiuntive con la tua risposta. Alcuni riferimenti e contesto sarebbero utili per il prossimo lettore. http://wordpress.stackexchange.com/help/how-to-answer

jdm2112 jdm2112
17 nov 2016 16:47:28