web-dev-qa-db-ja.com

特定のページの子ページにあるかどうかを確認する

表示されているページに応じてロゴを出力しようとしています。

<?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 } ?>

上記のコードは問題なく動作しますが、 '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

あなたは$post->post_parentでそれをすることができます。子ページの親がサービスページかどうかを確認する必要があります。だからこれはあなたがそれをチェックする方法です。

次のコードの123はあなたのサービスページのページIDであると仮定しました。実際のIDに置き換えてください。

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

この方法で投稿ページ/投稿名を取得できます。

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

あなたはあなたの要求に従って条件を使うことができます。

4
Ankit Panchal

robert hueの答えと同じように、この解決策はあなたに親要素のIDを取得します:

echo get_post_field( 'post_parent' );

2番目のパラメータはオプションであり、IDを保持できます(ループの外側にいるとき、または特定の要素の親をクエリするときのために)

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

この関数はpostスラグ、ステータス、タイプのようにpostテーブルからあなたにどんなフィールドでも得ることができます... codex のドキュメントを見てください。

あなたの場合、関数はこのようになります。

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

Get_post_ancestors($ post)を使用してください。現在表示されている投稿があなたの親ページの子である場合、それは配列を返します。

1
Loai Nagati
 
 $ post_current = get_post(); 
 
 $ args = array(
 'post_parent' => $ parent_id、//のID親
 'posts_per_page' => -1、
 'post_type' => 'page'、
 
); 
 $ children = get_posts ($ args); 
 
 $ is_child = false; 
 
 foreach($ fとしての$ children){
 if($ f-> ID == $ post_current-> post_parent){
 //それは子です
 $ is_child = true; 
 break; 
} 
} [ 。[。] 
 if($ is_child){
 //私は子供です... 
} else {
 //子供ではありません... 
} 
 
0
Fabio Manzo