私はすべての投稿タイプ(投稿、ページ、CPT)のコンテンツを、それらが共有しなければならない共有する(それらがその特定の用語を共有しないならば、出力はそのポストタイプを含むべきではありません)。
これが私がこれまでに持っているものです:
$term_list = wp_get_post_terms($post->ID, 'persons', array('fields' => 'names')); // persons is the custom taxonomy
$args = array(
'post_type' => array( 'post', 'page', 'profile', 'letter' ), // profile and letter are CPTs
'tax_query' => array(
array(
'taxonomy' => 'persons',
'field' => 'slug',
'terms' => $term_list
)
),
'post__not_in'=>array($post->ID)
);
$related_content = new WP_Query( $args );
if ( $related_content->have_posts() ) {
echo __('Related Content (profiles, pages, articles, letters):', 'teselle');
echo '<ul class="related-content">';
while ($related_content->have_posts()) {
$related_content->the_post();
echo '<li><a href="' . esc_url( get_permalink() ) . '">' . get_the_title() . '</a></li>';
} // endwhile
echo '</ul>';
} // endif
wp_reset_query(); wp_reset_postdata();
上記のコードの問題点は、出力が多すぎることです。
'terms' => 'the-exact-slug'
のように、必要な用語の正確なスラッグを記入すれば、それは完璧に機能しますが、実際には変数にする必要があります。
上記のコードの中で私の間違いが何かを誰かが指摘できますか?
ありがとうございます。
私たちは再びここで会います:)
これを使ってみてください:
$term_list = wp_get_post_terms( $post->ID, 'persons', array( 'fields' => 'ids' ) );
そして
'tax_query' => array(
array(
'taxonomy' => 'persons',
'field' => 'id',
'terms' => $term_list
)
),
知る限り、tax_query
はid
またはslug
のみでフィールドを受け入れます( here を参照してください。また、wp_get_post_terms
はnames
のみを受け入れます( slug)、ids
およびall
。したがって、それらの間の一致はid
のみです。
更新
slug
が必要な場合は、これを使用します:
$terms = wp_get_post_terms( $post->ID, 'persons' );
$term_slugs = wp_list_pluck( $terms, 'slug' );
あなたは名前の代わりにナメクジを試すかもしれません。
$term_list = wp_get_post_terms($post->ID, 'persons', array('fields' => 'slug'));
の代わりに
$term_list = wp_get_post_terms($post->ID, 'persons', array('fields' => 'names'));
あなたが使っているので
'field' => 'slug',
税クエリで。
編集:
$term_list = wp_get_post_terms($post->ID, 'persons', array('fields' => 'ids')); // persons is the custom taxonomy
$args = array(
'posts_per_page'=>-1,
'post_type' => array( 'post', 'page', 'profile', 'letter' ), // profile and letter are CPTs
'tax_query' => array(
array(
'taxonomy' => 'persons',
'field' => 'id',
'terms' => $term_list
)
),
'post__not_in'=>array($post->ID)
);
すべての結果を返すようにposts_per_pageを追加し、wp_get_post_termsにIDを使用し、tax_queryにIDを使用しました。