[WordPress General] 親カテゴリのテンプレートを子カテゴリに適用する方法

スマートなやり方を知ったので memo.

ほほぅ!

I would recommend using the category_template filter – just check if the current category is an ancestor of 67:

How do I set a specific template for sub-categories? – WordPress Development Stack Exchange

parent という slug の親カテゴリのテンプレートが category-parent.php として。

functions.php
/**
 * Set the parent category template to sub categories.
 */
add_filter( 'category_template', 'set_parent_category_template' );
function set_parent_category_template( $template ) {
    $parent_cat = get_category_by_slug( 'parent' );
    $parent_cat_id = $parent_cat->term_id;

    if ( cat_is_ancestor_of( $parent_cat_id, get_queried_object_id() ) ) {
        $template = locate_template( 'category-parent.php' );
    }

    return $template;
}

使われている関数やフィルターなど。

category_template でテンプレートを返すとフィルターされます。

ですので条件に応じて locate_template() を利用してテンプレートを返すようにします。

get_queried_object_id() を利用して、現在クエリされているオブジェクトの ID を取得します。

cat_is_ancestor_of( $cat1, $cat2 ) で、「先祖」カテゴリーとその ID をチェックして帰ってくる真偽値を利用しています。

これを利用すると strpos で親カテゴリ slug が含まれているか判定とかしなくても良いですね。