[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
として。
/**
* 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 が含まれているか判定とかしなくても良いですね。