PRE_GET_POST与存档帖子冲突

时间:2014-07-24 作者:worldwildwebdev

目前使用bbPress作为论坛。但现在我有一些冲突和存档后的页面显示而不是论坛?我应该如何继续?有什么想法吗?

EDIT:

实际发现了导致问题的原因。正是这个功能似乎以某种方式干扰了我的论坛。该功能用于在作者存档页面中显示自定义帖子类型。仍然没有解决这个问题的方法。

function namespace_add_custom_types( $query ) {
  if( is_archive() && empty( $query->query_vars[\'suppress_filters\'] ) ) {
    $query->set( \'post_type\', array(
     \'post\', \'vehicles\'
      ));
     return $query;
   }
}
add_filter( \'pre_get_posts\', \'namespace_add_custom_types\' );

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

作为您的pre_get_posts 函数保持不变,在使用时会发生冲突pre_get_posts 非常粗心。

pre_get_posts 在主查询之前修改查询变量对象AND WP_Query 已执行。因此,函数中的任何更改都会影响主查询和使用WP_Query. 这就是为什么在你的论坛页面上一切都乱七八糟的原因,因为你也在把这些更改添加到你的论坛中

其次,在处理任何类型的存档查询时(is_archive(), is_category() 等)所做的任何更改pre_get_posts 也会影响后端

因此,您的解决方案是运行pre_get_posts 仅在主查询上(is_main_query()), 也就在前端(!is_admin())

这样就可以了

if( !is_admin() && $query->is_main_query() && $query->is_archive() );

EDIT

我不会更改上面的代码。只有意识到您的代码是针对作者页面的。那么你应该使用is_author(), 不is_archive()

结束