子カテゴリーの有無、一番上のカテゴリーを取得

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

表示中のカテゴリー(ターム)に子カテゴリー(子ターム)があるかどうかで条件分岐するためにfunctions に下記を記入して、if (category_has_children())、if (!category_has_children()) で分岐。
[code language=”php”] function category_has_children() {
global $wpdb;
$term = get_queried_object();
$category_children_check = $wpdb->get_results(” SELECT * FROM wp_term_taxonomy WHERE parent = ‘$term->term_id’ “);
if ($category_children_check) {
return true;
} else {
return false;
}
}
[/code]

たとえば、タクソノミー p-category のタームページで最上階層のタームを取得し、ターム名を表示
[code language=”php”] $term = get_query_var(‘p-category’);
$term_info = get_term_by(‘id’,$term,’p-category’);
$ancestors = get_ancestors( $term_info->term_id, ‘p-category’ );
$ancestors = array_reverse($ancestors);
$top_term_id = $ancestors[0];
$top = get_term( $top_term_id, ‘p-category’ );
echo $top->name;[/code]

シングルページで最上階層のカテゴリーを取得する場合、functions に以下を記入し、$top_cat = get_top_category();で取得 http://stackoverflow.com/questions/8823452/wordpress-function-to-get-top-level-category-of-a-post

function get_top_category() {
    $cats = get_the_category(); // category object
    $top_cat_obj = array();

    foreach($cats as $cat) {
        if ($cat->parent == 0) {
            $top_cat_obj[] = $cat;  
        }
    }
    $top_cat_obj = $top_cat_obj[0];
    return $top_cat_obj;
}