我在wordpress中的footer.php中有下一个WP_Query:
wp_reset_postdata();
$argsLast = array(
'post_type' => 'post',
'posts_per_page' => 3,
'orderby' => 'date',
'order' => 'DESC',
'category__not_in' => array(193,189,192,195,207,190,213),
);
$ultimosposts = new WP_Query( $argsLast );
除了类别页面之外,它在我的wordpress的所有页面都能正常工作。
我做了几次测试,无效的测量计是'order'或'orderby'。
如果有人能解释发生的事情,我将不胜感激。
解决:问题是由插件引起的:按标题排序类别
我停用了插件,我正在使用我主题的functions.php中的下一个代码对类别中的帖子进行排序(非常感谢@PieterGoosen,现在我对Wordpress中的查询了解得更多):
add_action( 'pre_get_posts', 'orden_posts_categoria');
function orden_posts_categoria($q){
if (!is_admin()
&& $q->is_main_query()
&& $q->is_category()
) {
$q->set( 'orderby', 'title' );
$q->set( 'order', 'ASC' );
}
}
注意:此代码来自@PieterGoosen
通过这种方式,我修改了wordpress的主要查询。因此,在选择性结构中设置正确的条件非常重要。
答案 0 :(得分:0)
很高兴你已经停用了插件,因为在我看来,插件是一堆垃圾,因为它打破了页面功能。我只能推测,但它错误地使用pre_get_posts
或使用query_posts
你应该从不使用。
要解决您的问题,您需要返回应该如下所示的dafault循环
if ( have_posts() ) { // Sometimes category pages don't have this, not really necessary
while ( have_posts() ) {
the_post();
// Your markup and template tags
}
}
您再次应该会在默认情况下按日期排序您的类别页面上的帖子。
现在,为了解决在类别页面上按标题排序帖子的问题,我们将使用pre_get_posts
在主查询运行之前更改主查询变量。这是推荐的方法,您永远不应该使用自定义查询替换主查询来解决这些问题。它导致其他问题,特别是错误的帖子和错误的分页
在您的functions.php或您自己的自定义插件中,添加以下内容
add_action( 'pre_get_posts', function ($q )
{
if ( !is_admin() // Check that we are on the front end and not back end
&& $q->is_main_query() // Make sure we only alter the main query
&& $q->is_category() // Only target category pages
) {
$q->set( 'orderby', 'title' );
$q->set( 'order', 'ASC' );
}
});
我所做的检查非常重要。 pre_get_posts
改变WP_Query
的所有实例,而不仅仅是主查询,这会发生在后端和前端以及所有页面上。使用pre_get_posts
您现在应该按照帖子标题对您的类别页面进行排序,并且页脚上的自定义查询8n现在也应该在类别页面上正确显示。
最后一个提示,为避免自定义过滤器更改自定义WP_Query
实例,请在查询参数中使用'suppress_filters' => true
。 get_posts
执行相同操作以避免自定义过滤器更改输出
就查询问题而言,您应该花时间阅读this post我就主要查询和自定义查询的主题所做的