按多个分类筛选自定义帖子

时间:2017-03-16 作者:Monk

Im使用自定义帖子类型-名为“Products”

我注册了多个分类-“类别”和“剂量”

我正在尝试设置只显示自定义帖子类型“products”的页面,如果taxonomy Category=\'injectors\'和剂量=\'1ml,2ml,5ml\'

我希望这是有意义的——设法让自定义的帖子归档在单个分类法中正常工作,但不确定是否要按多个分类法进行过滤。

干杯

这是我正在尝试的代码,但它没有

<?php 
$myquery[\'tax_query\'] = array( 
   \'relation\' => \'OR\', 
    array( 
         \'taxonomy\' => \'product_category\',
         \'terms\' => array(\'shrouded\'),
         \'field\' => \'slug\', 
    ), 
    array( 
        \'taxonomy\' => \'dosages\',
        \'terms\' => array( \'1ml\' ),
        \'field\' => \'slug\', 
   ),
);
query_posts($myquery); ?>

3 个回复
SO网友:Mihai Apetrei
SO网友:Zane Taylor

因为你正在使用query_posts, 您正在覆盖整个归档查询,因此必须在查询参数中指定自定义帖子类型,如下所示:

$myquery[\'post_type\'] = \'products\';
然而,更好的解决方案是避免query_posts 总的来说,这样主查询就不会中断,并使用答案中描述的其他方法之一here.

SO网友:KFish

这不应使用query_posts, 就这点而言,什么都不应该用query_posts 因为有更好的方法可以在执行前修改主查询。看见pre_get_posts

也就是说,根据用例,这应该通过附加的自定义查询来处理,而不是修改主查询。

此外,该问题还引用了两个分类法之间需要AND关系的情况,但在代码示例中使用了OR。

Solution:

$args = array(
   \'post_type\' => \'products\',
   \'posts_per_page\' => -1, //<-- Get all
   \'tax_query\' = array( 
      \'relation\' => \'AND\', 
      array( 
         \'taxonomy\' => \'product_category\',
         \'terms\' => array(\'injectors\'),
         \'field\' => \'slug\', 
      ), 
      array( 
        \'taxonomy\' => \'dosages\',
        \'terms\' => array( \'1ml\',\'2ml\',\'5ml\' ),
        \'field\' => \'slug\'
      )
   )
);
$products = new WP_Query($args);
if($products->have_posts()) : while($products->have_posts()) : the_post() ;
   // Output desired markup inside custom query loop here.
endwhile; endif; `

相关推荐