当您在类别页面时,订单或订单不在WP_Query中工作

时间:2015-05-04 10:43:46

标签: wordpress wp-query

我在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的主要查询。因此,在选择性结构中设置正确的条件非常重要。

1 个答案:

答案 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' => trueget_posts执行相同操作以避免自定义过滤器更改输出

修改

就查询问题而言,您应该花时间阅读this post我就主要查询和自定义查询的主题所做的