[wp]カスタム投稿のタクソノミーをラジオボタン化する

地味に使うから知っておいたほうがいい。

何がしたいか

通常のタクソノミーは自由入力だったりチェックボックスだったりで、好き勝手やれる。単にブログだったらそれでいいんだけど、チェック内容で表示を変えるとかしたい場合、好き勝手にやられると望まない状態を引き起こす場合がある。

一つだけ選べばいいよ、って作っても、投稿する人がそのルールを知らなかったり気を利かせてしまったりで複数選択されることは十分考えられるし、そうでなくても、単に大文字小文字全角半角メチャメチャになった同名のタームが入り乱れるととてもしんどいことになる。

ということで、ラジオボタン化して強制的に一つしか選べない状態を作りたい場合がある。

やりたいこと

特定のカスタム投稿のタクソノミーをラジオボタン化したい。

プラグインを使う

これを使う。

Radio Buttons for Taxonomies
Replace the default taxonomy boxes with a custom metabox that uses radio buttons... effectively limiting each post to a single term in that taxonomy.

2021.9現在、更新が5ヶ月前で止まってるけどWP最新版で動いてるので使う。使えるもんは使う。

ちなみにfunctions.phpで自作する一派もいるけどやめといたほうがいいと思います。というか、試してみたけど動かなかった。WPのバージョンアップで内部が変わって通用しなくなった感じがある。

やる

  1. プラグインをインストールする
  2. 設定画面でラジオボタン化したいタクソノミーを指定する
  3. 終わり

簡単。

応用

「このタームを選択してたら○○を表示」みたいにしたい場合、まず抽出する必要がある。
見た目はラジオボタンになっても機能自体は通常のタクソノミーだからforeachとかで引っ張り出す必要がある。

<?php
    $terms = get_the_terms($post->ID,'【タクソノミー名】');
    if($terms):
        foreach($terms as $term):
            //一般的な表示
            echo '<span><a href="'.get_term_link($term).'">'.$term->name.'</a></span>';
            //条件分岐
            if($term->name == '***'):
            elseif($term->name == '***'):
            else:
            endif;
        endforeach;
    endif;
?>

こうなる。

1個だけしか選択してないのに、とか思っても仕様だから仕方ないと思って慣れましょう。

コメント

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