如何从分类术语中跳过相同的帖子?

时间:2016-02-18 作者:Ayaz Ali Shah

我试图检索特定分类类别的帖子。我有两个分类法类别。

第一类第二类在这两类中有一些不同和相同的职位。所以当我通过terms id 然后查询返回一些帖子两次,因为这些帖子是来自上述两个类别的链接。

$ourwork_cat_ids = array(3,4);// Category Term ID
$args_OW = array();
foreach($ourwork_cat_ids as $wIds){
    $args_OW[] = array(
    \'post_type\' => \'portfolio\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'portfolio_category\',
            \'field\' => \'id\',
            \'terms\' => $wIds
         )
      )
    );
}//end foreach
foreach($args_OW as $OW){
    $portfolioQuery = new WP_Query($OW);
    if( $portfolioQuery->have_posts() ){ 
            while( $portfolioQuery->have_posts() ){ $portfolioQuery->the_post(); 
                echo the_title().\'<br />\';
            }
    }

}// end foreach

 Out Put
post one 
post two 
post two
post three
那么,我是否有可能跳过双岗位?如果有人能指导我,我将不胜感激。谢谢

2 个回复
最合适的回答,由SO网友:N00b 整理而成

你不应该使用WP_Query 在这种循环中(可能会有一些例外,但在您的情况下不会),因为您可以用一个查询完成大多数事情。这codex link 一切都与WP_Query 有解释和非常简单的例子。

如果分类法是一个杂货清单,那么去商店购物将是一个问题,我怀疑你会不会分别去商店购买每一件商品。不,你只去一次,然后全部买下。

看看这些例子,如果你有任何问题,请告诉我。

//If you\'re using actual categories
$args = array(
    \'post_type\' => \'portfolio\',
    \'cat\' => \'2, 4, 5, 77, 1031\' // Category IDs
);

//If you\'re using single custom taxonomy
$args = array(
    \'post_type\' => \'portfolio\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'portfolio_tax\',
            \'field\'    => \'term_id\',
            \'terms\'    => array( 2, 4, 5, 77, 1031 ) // Term IDs
        )
    )
);

//If you\'re using multiple custom taxonomies
$args = array(
    \'post_type\' => \'portfolio\',
    \'tax_query\' => array(
        \'relation\' => \'AND\',  // Relation can be \'AND\' or \'OR\'
        array(
            \'taxonomy\' => \'portfolio_tax\',
            \'field\'    => \'term_id\',
            \'terms\'    => array( 2, 4, 5, 77, 1031 ) // Term IDs
        ),
        array(
            \'taxonomy\' => \'second_tax\',
            \'field\'    => \'term_id\',
            \'terms\'    => array( 1, 3, 6, 81, 1251 ) // Term IDs
        )
    )
);


//Query itself with output
$query_results = new WP_Query( $args );

while( $query_results->have_posts() ) { 

    $query_results->the_post(); 
    echo the_title() . \'<br />\';
}

SO网友:тнє Sufi

你做错了。您不需要使用foreach 在此处循环。tax_query 参数terms 可以是intstringarray.

您可以使代码更简单,如下所示:

$args = array(
    \'post_type\' => \'portfolio\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'portfolio_category\',
            \'field\' => \'id\',
            \'terms\' => array(3,4);// Category Term ID
         )
      )
    );
要跳过双立柱,我们可以使用posts_distinct 滤器我们需要把它放在WP_Query.

function search_distinct() {
    return "DISTINCT";
}
add_filter(\'posts_distinct\', \'search_distinct\');
现在,这是我们的WP_Query:

$portfolioQuery = new WP_Query($args);
if( $portfolioQuery->have_posts() ){ 
        while( $portfolioQuery->have_posts() ){ $portfolioQuery->the_post(); 
            echo the_title().\'<br />\';
        }
}
wp_reset_postdata();
我们需要移除过滤器。

remove_filter(\'posts_distinct\', \'search_distinct\');