[wp]taxonomy.phpで現在のタームの親、兄弟を取得する方法

一日近くかかった

やりたいこと

タクソノミーに親子関係を構築してある。

  • 現在表示しているタームの親タームを取得したい。
  • 現在表示しているタームの兄弟タームを取得したい。

親をやる

<?php
$terms = get_queried_object($post->ID, '【タクソノミースラッグ】');
if ( $terms && ! is_wp_error( $terms ) ) {
    if (! $terms->parent ) {
        $parent_id = esc_html( $terms->term_id );
        $parent_name = esc_html( $terms->name );
        echo $parent_id;
        echo $parent_name;
    }
}
?>

idと名前が拾えたら十分だろうけど、他に引っ張りたい内容があればこちらを参照。

WordPress タームの取得と表示方法 - by Takumi Hirashima
WordPress のタームの取得と表示方法を紹介しています。タクソノミーに登録されたターム一覧の表示方法。投稿数をタグで囲う、タームを好きな順番で並び替える方法など。

兄弟をやる

親が取得できたらそれをトリガーに下層のタームを引っ張ってこれる。
条件分岐を活用すれば、現在表示しているタームにclassとかをつけることもできる。

<?php
$taxonomy = '【タクソノミースラッグ】';
//親を取得
$terms = get_queried_object($post->ID, $taxonomy);
if ( $terms && ! is_wp_error( $terms ) ) {
    if (! $terms->parent ) {
        $parent_id = esc_html( $terms->term_id );
        $parent_name = esc_html( $terms->name );
        echo $parent_id;
        echo $parent_name;
    }
}
//兄弟を取得・表示
$args = array(
    'hide_empty' => true,
    'parent' => $parent_id,
    'order' => 'DESC',
);
$categories = get_terms( $taxonomy, $args);
if($categories) {
?>
<ul>
<?php foreach($categories as $value): ?>
    <li <?php if(single_term_title( '', false ) == $value->name){ echo 'class="active"';} ?>><a href="<?php echo get_term_link($value); ?>"><?php echo $value->name; ?></a></li>
<?php endforeach; ?>
</ul>
<?php } ?>

nameで照合して表示中のタームだったらclass=”active”が付くようにしてある。もし兄弟内で同一名称があったら破綻する。まずないだろうけど。

まとめ

やってる最中に設定したタームの親子がぶっ壊れて表示されないのを記述ミスだと勘違いしてめちゃくちゃ弄り倒した。

ネットにある情報を魔改造したので引用元を出したくてもよくわかんなくなっちゃった。

コメント

タイトルとURLをコピーしました