WordPressのカテゴリーアーカイブで特定のカテゴリーの子孫カテゴリーかを判定する方法

  • 更新日:
  • 公開日:

特定のカテゴリーの子孫カテゴリーかを判定する関数を作ったのでメモ。

本当はWordPressをECサイトにするWelcartで使うため用意したんですけど、「あれ、WordPressそのものでも使えるのでは」ということで。

条件分岐とかにどうぞ。カスタム分類でも使えます。

子孫カテゴリーかを判定する関数

以下のソースコードをfunctions.phpに貼り付けて使います。

function is_term_tree($root_term_slug = 'item') {
    $check_result = false;
    $id;
    $tax_slug;

    if(is_category()){
        $tax_slug = "category";
        $id = get_query_var('cat');
    }else if(is_tax()){
        $tax_slug = get_query_var('taxonomy');
        $term_slug = get_query_var('term');
        $term = get_term_by("slug",$term_slug,$tax_slug);
        $id = $term->term_id;
    }
    $current_term = get_term($id,$tax_slug);
    $current_term_id = $current_term->term_id;

    if(is_category() || is_tax()) {
        $root_term = get_term_by('slug', $root_term_slug, $tax_slug);
        $root_term_id = $root_term->term_id;
        if($current_term_id == $root_term_id) {
            $check_result = true;
        } else {
            $ancestors_ids = get_ancestors($current_term_id, $tax_slug);
            foreach($ancestors_ids as $anc) {
                if($anc == $root_term_id) {
                    $check_result =  true;
                    break;
                }
            }
        }
    }
    return $check_result;
}

引数に親カテゴリーのスラッグを指定して、カテゴリーアーカイブで以下のように関数を呼び出します。

<?php if(is_term_tree('web')) : ?>
<p>「Web」カテゴリーの子孫カテゴリーです。</p>
<?php endif; ?>

これで特定のカテゴリーの子、孫、曾孫…、のカテゴリーかどうかを判定して条件分岐の処理が出来ます。

ture、falseが返される条件

引数に指定した親カテゴリーのアーカイブか、そのカテゴリーの子孫カテゴリーアーカイブだった場合に「true」が返されます。

それ以外のカテゴリーや、アーカイブ(カテゴリー、もしくは階層持ちのカスタム分類)ではないページ、引数にスラッグを入れ忘れた場合に「false」が返されます。


ソースコードの一部はこちらの記事を参考にしています。

参考記事:
もう迷わない!アーカイブページで現在のカテゴリ・タグの情報を簡単に取得する方法【WordPress】 | blog.ks-product.com

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone