web-dev-qa-db-fra.com

Vérifier si est sur la page enfant d'une page particulière

J'essaie de créer un logo en fonction de la page affichée.

<?php 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 } 
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="title here"></a>
            </h1>
    </div>
<?php } ?>

Le code ci-dessus fonctionne bien, mais comment appliquer l’échange d’image de logo sur les sous-pages des "services"?

5
user1752759
<?php 
global $post;

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 } 

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
}

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=""></a>
            </h1>
    </div>
<?php } ?>
3
user1752759

Vous pouvez le faire avec $post->post_parent. Vous devrez vérifier si le parent de la page enfant est la page Services. Donc, voici comment vous allez le vérifier.

J'ai supposé que 123 dans le code suivant est l'ID de la page de vos services. Remplacez-le par l'ID réel.

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 }
8
Robert hue

Vous pouvez obtenir le nom de la page/du poste en utilisant cette méthode.

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

vous pouvez utiliser la condition selon vos besoins.

4
Ankit Panchal

comme pour la réponse de robert hue, cette solution vous donnera l'ID de l'élément parent:

echo get_post_field( 'post_parent' );

le second paramètre est facultatif et peut contenir un ID (pour quand vous êtes en dehors de la boucle ou voulez interroger le parent d'un élément spécifique)

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

cette fonction peut obtenir n'importe quel champ de la table post, comme le post slug, le statut, le type ... voir la documentation dans le codex .

dans votre cas, la fonction ressemblerait à ceci:

if ( get_post_field( 'post_parent' ) === 9 ) :
    //child of page ID 9
endif;
2
honk31

Utilisez get_post_ancestors ($ post). Il renverra un tableau si le message actuellement affiché est l'enfant de votre page parent.

1
Loai Nagati
 
 $ post_current = get_post (); 
 
 $ args = array (
 'post_parent' => $ parent_id, // l'identifiant de le parent 
 'posts_per_page' => -1, 
 'post_type' => 'page', 
 
); 
 $ children = get_posts ($ args); 
 
 $ is_child = false; 
 
 pour chaque ($ enfants en tant que $ f) {
 if ($ f-> ID == $ post_current-> post_parent) {
 // c'est un enfant 
 $ Is_child = true; 
 Break; 
} 
} 
 
 if ($ is_child) {
 // C'est un enfant ... 
} autre {
 // Ce n'est pas un enfant ... 
} 
 
0
Fabio Manzo