term_exixts()
関数は、タクソノミータームが存在するかどうかを判断する関数です。
term_exists() 関数とは
タクソノミータームが存在するかどうか判断します。
以前は 2.3.0 で登場した is_term()
関数でしたが非推奨になり、3.0.0 でこの関数が用意されました。
パラメーター
$term | ターム ID、タムスラッグ、ターム名を設定 |
$taxonomy | タクソノミー名を設定 |
$parent_term | 検索対象の親タームの ID |
使い方
返り値が true
or false
ではない点に注意が必要です。
- タームが存在しなければ
null
を返す - タクソノミーが指定されておらず、タームが存在した場合にはターム ID を返す
- タクソノミーが指定され、タームが存在する場合にはターム ID とタクソノミー ID を配列で返す
これらの挙動を確認してみます。
ターム ID としてあり得なさそうな数字を指定してみます。
var_dump( term_exists( 10000 ) );
// 結果
NULL
まだ立ち上げて間もない WordPress 環境ですので、ターム ID は 10000 まで達していないと思い、この数値を指定したところ、結果は NULL
となりました。
次に、タクソノミーは指定せず、存在していそうなターム ID を指定してみます。
var_dump( term_exists( 1 ) );
// 結果
string(1) "1"
この場合、タームが存在しているためターム ID を返してきます。
次に、実際に存在するタクソノミー名とターム名を入れてみます。
var_dump( term_exists( 'テンプレート', 'category' ) );
// 結果
array(2) {
["term_id"]=>
string(2) "38"
["term_taxonomy_id"]=>
string(2) "38"
}
存在していたため、ターム ID とタクソノミー ID を返してきました。
これらが存在するかどうかで条件分岐するには以下のような方法があります。
if ( is_array( term_exists( 'テンプレート', 'category' ) ) ) {
// カテゴリー「テンプレート」が存在する場合
}
存在する場合は配列で返ってくるため is_array()
で判断するという方法もあります。
フック
term_exists_default_query_args
apply_filters( ‘term_exists_default_query_args’, array $defaults, int|string $term, string $taxonomy, int|null $parent_term )
まとめ
タクソノミーやタームを扱う際にはよく利用する関数ですので、よく動作を確認しておきましょう。
GitHub で利用ケースを探してみるとたくさん見つけられるのでぜひ参考にしてみてください。