情報が古い可能性があります。
WP_Term_Query の使い方
基本的な使い方ですが、get_terms とほとんど変わりません。
// WP_Term_Query arguments
$args = array(
// タクソノミー(カスタム分類)を指定
'taxonomy' => array( 'taxonomy_name' ),
// 投稿のないターム(カスタム分類のカテゴリ)も取得
'hide_empty' => false,
);
// The Term Query
$term_query = new WP_Term_Query( $args );
// The Loop
if ( ! empty( $term_query ) && ! is_wp_error( $term_query ) ) {
// do something
foreach ( $term_query->get_terms() as $term ) {
}
} else {
// no terms found
}
WP_Term_Query Generator を使用してコードを生成してみました。
meta_query について
$args = array(
'taxonomy' => array( 'taxonomy_name' ),
'hide_empty' => false,
'meta_query' => array(
array(
'key' => 'キー',
'value' => '値',
)
),
);
このように、WP_Term_Queryクラスでは meta_query
を指定することができます。
$args = array(
'taxonomy' => array( 'taxonomy_name' ),
'hide_empty' => false,
'meta_key' => 'キー',
'meta_value' => '値',
);
meta_key
と meta_value
を用いて指定しても同じです。
get_terms
では WordPress 4.4.0から meta_query
を指定することができます。
また、WordPress 4.5.0から meta_key
と meta_value
の指定も可能です。
WP_Queryクラスで meta_query
を指定すると、投稿のカスタムフィールドを取得しますが(データベース上のテーブルでいうと wp_postmeta
)WP_Term_Queryクラスの場合は注意が必要です。
Database Description – WordPress Codex によると、WordPress 4.2.2で wp_termmeta
というテーブルが追加されています。
※WP_Term_Queryクラスで取得するメタ情報はこの wp_termmeta
テーブルから取得するため、投稿のカスタムフィールドとは違います。
また WordPress 4.4.0 では wp_termmeta
テーブルへアクセスするための、以下の関数が追加されました。
- add term meta – WordPress Codex
- update_term_meta – WordPress Codex
- delete_term_meta – WordPress Developer Codex
- get_term_meta – WordPress Developer Resources
- update_termmeta_cache – WordPress Developer Resources
タームに紐づくメタ情報(カスタムフィールドといっていいのでしょうか)を作成できるようになったということですね。
これらの WordPress の API を使用してない、カスタムフィールドのプラグインなどでは wp_termmeta
テーブルにデータが保存されない場合があります。
ちなみに var_dump( $term_query );
してみたところ、このようなSQLが実行されていました。
SELECT
DISTINCT t.*,
tt.*
FROM
wp_terms AS t
INNER JOIN
wp_termmeta
ON (
t.term_id = wp_termmeta.term_id
)
INNER JOIN
wp_term_taxonomy AS tt
ON t.term_id = tt.term_id
WHERE
tt.taxonomy IN('taxonomy_name')
AND ((
wp_termmeta.meta_key = 'キー'
AND wp_termmeta.meta_value = '値'
))
ORDER BY
t.name ASC