大阪から日本全国のご依頼に対応。WEBサイト制作ならアトリエ涼。

お知らせ/ブログ

※当サイトは、アフェリエイト広告を利用しています。

2023.12.05

制作メモ

【WordPress】親と子ともに条件分岐する方法

【WordPress】親と子ともに条件分岐する方法

条件分岐を親だけではなく、その配下の子にも適応させたいという案件があって、
色々調べたのでメモ。
通常だと親を分岐させても子まで反映されないんですよね。
WordPressの関数を使用しました。

固定ページの親と子の条件分岐

functions.php

function is_parent_slug() {
    global $post;
    if ($post->post_parent) {
        $post_data = get_post($post->post_parent);
        return $post_data->post_name;
    }
}

条件分岐をしたい箇所

<?php if (is_page('親ページのスラッグorID') || is_parent_slug() === '親ページのスラッグorID') : ?>
//出力内容
<?php else : ?>
//出力内容
<?php endif; ?>

「is_parent_slug」というWordPressの関数をfunctions.phpに記述。
その後、分岐したい箇所にPHPのif文を挿入。
これを逆にするとエラーが出て更新できませんでした。
functions.phpの記述追加からする必要がありそうです。

数が少なければ個別に指定しても良さそうですが
今後、子ページが増えていきそうな場合は追加するのを忘れそうなので
この記述を挿入した方がいいかなと思います。

カテゴリーページの親と子の条件分岐

functions.php

if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
    function post_is_in_descendant_category( $cats, $_post = null ) {
        foreach ( (array) $cats as $cat ) {
            $descendants = get_term_children( (int) $cat, 'category' );
            if ( $descendants && in_category( $descendants, $_post ) )
                return true;
        }
        return false;
    }
}

条件分岐をしたい箇所

<?php if (in_category('親ページのスラッグorID') || post_is_in_descendant_category('親ページのスラッグorID')) : ?>
//出力内容
<?php else: ?>
//出力内容
<?php endif; ?>

「post_is_in_descendant_category」という関数をfunctions.phpに記述。
その後、分岐したい箇所にPHPのif文を挿入。

記述内容を「is_category」にすると
子の分岐が反映されないので「in_category」で記述しました。
上手くいかないなぁと思っていたらこれが原因でした。
結構悩んだので忘れないようにメモ。