web-dev-qa-db-ja.com

Tax_query termsパラメータにpost termを追加

私は私の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();

任意の助けは大歓迎です!

1
tmgale12

ここにいくつか問題があります。

  • あなたのコードが立つように、$postは未定義です。 $postの代わりにget_the_ID()を使用して投稿IDを取得することを実際にお勧めします。

  • wp_get_post_terms()は追加のdb呼び出しを行うので、もしあなたが本当にパフォーマンスを重視しているのであれば、私はむしろget_the_terms()を使います。

  • 用語名を返していますが、tax_queryfieldパラメータを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
}
1
Pieter Goosen