从query_posts()中排除WordPress自定义分类术语

时间:2016-06-02 05:02:34

标签: php wordpress query-string custom-post-type custom-taxonomy

我在我的一个存档页面上添加了以下代码,就在循环之前。我需要这个特定的档案按字母顺序显示,而不是按时间顺序显示。这就是它应该做的事情。

global $query_string;
$posts = query_posts($query_string . '&orderby=title&order=asc&posts_per_page=-1');

需要它来排除特定的分类术语。我的分类法被称为“公司类型”,我希望它排除术语“特色”。我可以通过添加&company-type=featured来过滤它以仅显示分类术语,但我需要完成相反的操作。

我发现旨在实现此目的的一切都使用了非常不同的语法。我试图将我当前的参数与该语法相匹配,但没有运气,我无法弄清楚它是如何适合这个例子的。我见过的示例使用tax_query参数,但我无法使用我的代码。

我知道可能有多种方法可以实现这一点,而且我已经读到使用query_posts并不一定是最好的解决方案,但它是迄今为止我唯一能够完成的工作。谁能帮我?

1 个答案:

答案 0 :(得分:0)

好的,我明白了。我使用了不同的语法,我曾尝试过几次,但它并没有为我工作,因为我不知道如何将$query_string中的原始参数包括在内。

有一个名为wp_parse_args的WordPress函数可以让它们为您提供相同的格式。这是我最终得到的代码。 (我也改为WP_Query而不是query_posts,现在我明白为什么以前它不适合我。)

global $query_string;

$args = array( 
  'tax_query' =>  array (
    array(
      'taxonomy' => 'company-type', // My Custom Taxonomy
      'terms' => 'featured', // My Taxonomy Term that I wanted to exclude
      'field' => 'slug', // Whether I am passing term Slug or term ID
      'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
    ),
  ),
  'posts_per_page' => -1,
  'orderby' => 'title',
  'order'=>'ASC'
);

$args = wp_parse_args( $query_string, $args );
$query = new WP_Query( $args );