web-dev-qa-db-ja.com

同じカスタム分類法に基づいてコンテンツを出力する方法

私はすべての投稿タイプ(投稿、ページ、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'のように、必要な用語の正確なスラッグを記入すれば、それは完璧に機能しますが、実際には変数にする必要があります。

上記のコードの中で私の間違いが何かを誰かが指摘できますか?

ありがとうございます。

2
user2015

私たちは再びここで会います:)

これを使ってみてください:

$term_list = wp_get_post_terms( $post->ID, 'persons', array( 'fields' => 'ids' ) );

そして

'tax_query' => array(
     array(
         'taxonomy' => 'persons',
         'field' => 'id',
         'terms' => $term_list
         )
     ),

知る限り、tax_queryidまたはslugのみでフィールドを受け入れます( here を参照してください。また、wp_get_post_termsnamesのみを受け入れます( slug)、idsおよびall。したがって、それらの間の一致はidのみです。

更新

slugが必要な場合は、これを使用します:

$terms = wp_get_post_terms( $post->ID, 'persons' );
$term_slugs = wp_list_pluck( $terms, 'slug' );
1
Anh Tran

あなたは名前の代わりにナメクジを試すかもしれません。

$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を使用しました。

0
birgire