使用过帐术语填充TAX_QUERY TERMS参数

时间:2016-07-04 作者:tmgale12

我需要用帖子的当前术语填充我的tax\\u查询中的terms参数。

我一直在尝试在变量中使用WP函数WP\\u get\\u post\\u terms,然后在terms参数中引用该变量以输入当前posts术语名称。

我一直在使用codex页面作为参考,但我似乎无法填充它。

有人能给我指出正确的方向吗??

//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 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

你这里有几个问题。

作为您的代码标准,$post 未定义。实际上,利用get_the_ID() 获取帖子ID而不是$post

  • wp_get_post_terms() 进行额外的db调用,因此如果您真的对性能感兴趣,我宁愿使用get_the_terms()

    返回术语名称,但设置field 中的参数tax_queryslug. 字段值应与传递的术语的值匹配。只是一个便条,永远不要使用name a中的字段tax_query, 在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
    }