私は私のtax_queryのtermsパラメータに投稿の現在の用語を設定する必要があります。
変数内でWP関数wp_get_post_termsを使用してから、その変数をtermsパラメータで参照して現在の投稿の用語名を入力しようとしています。
参照としてコーデックスページを使用してきましたが、それを取り込むことができないようです。
誰かが私を正しい方向に向けることができますか?
//Returns Array of Term Names for "topic"
$term_list = wp_get_post_terms($post->ID, 'topic', array("fields" => "names"));
echo $term_list;
$args = array (
'post_type' => 'knowledge-base',
'orderby' => 'meta_value_num',
'meta_key' => 'top_four_num',
'tax_query' => array(
array(
'taxonomy' => 'topic',
'field' => 'slug',
'terms' => $term_list,
),
),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo '<h2>' . the_title() . '</h2>';
}
}
// Restore original Post Data
wp_reset_postdata();
任意の助けは大歓迎です!
ここにいくつか問題があります。
あなたのコードが立つように、$post
は未定義です。 $post
の代わりにget_the_ID()
を使用して投稿IDを取得することを実際にお勧めします。
wp_get_post_terms()
は追加のdb呼び出しを行うので、もしあなたが本当にパフォーマンスを重視しているのであれば、私はむしろget_the_terms()
を使います。
用語名を返していますが、tax_query
のfield
パラメータをslug
に設定してください。フィールド値は渡された用語の値と一致する必要があります。ちょっと注意してください、tax_query
の中で決してname
フィールドを使用しないでください、WP_Tax_Query
クラスの名前サニタイズに関する問題があります。 wp_get_post_terms()
を使用している場合は、fields
パラメータをids
に設定して、用語IDの配列を返します。
wp_get_post_terms()
$term_list = wp_get_post_terms(
get_the_ID(),
'topic',
array(
'fields' => 'ids'
)
);
if ( $term_list
&& !is_wp_error( $term_list )
) {
$args = array (
'post_type' => 'knowledge-base',
'orderby' => 'meta_value_num',
'meta_key' => 'top_four_num',
'tax_query' => array(
array(
'taxonomy' => 'topic',
'terms' => $term_list,
),
),
);
// Run your custom query here
}
get_the_terms()
$terms = get_the_terms(
get_the_ID(),
'topic'
);
if ( $terms
&& !is_wp_error( $terms )
) {
$term_list = wp_list_pluck( $terms, 'term_id' );
$args = array (
'post_type' => 'knowledge-base',
'orderby' => 'meta_value_num',
'meta_key' => 'top_four_num',
'tax_query' => array(
array(
'taxonomy' => 'topic',
'terms' => $term_list,
),
),
);
// Run your custom query here
}