特定のカテゴリーの子孫カテゴリーかを判定する関数を作ったのでメモ。
本当は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