确保首先检索粘性帖子(不使用两个查询)?

时间:2013-02-19 作者:Kayo

我需要维护分页以用于无限滚动。

是否没有办法告诉query\\u posts首先检索粘性帖子?

这似乎是主页上标准wordpress博客的默认行为,但据我所知,在页面的自定义模板上会变得有点笨拙。

非常感谢。

Edited to show current query:

query_posts( array( 
    \'post_type\' => array(\'post\', \'careers-post\'),
    \'paged\' => $paged,
    \'posts_per_page\' => 6,
    \'category__in\' => $page_categories,
    \'ignore_sticky_posts\' => 0
) );
Edit 2:“category\\uu in”似乎与很久以前的贴子有冲突:http://wordpress.org/support/topic/category_in-ampamp-sticky

只需确认一下,删除“category\\uu in”确实会让粘性帖子如预期的那样浮出水面,但显然并不能解决问题。

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

翻阅源代码,我真的找不到任何会导致“category\\uu in”破坏结果顺序的奇怪逻辑。如果这样做,您还可以在WordPress Trac.

也很难再现这种问题,因为它可能取决于特定于您的数据库的另一个问题,或者数据以前是如何被自定义代码操纵的。

不管怎样,只要你付出一点努力,你总能解决这类问题。以下内容将过滤您的查询结果并将粘性帖子发送到顶部:

add_filter(\'the_posts\', \'bump_sticky_posts_to_top\');
function bump_sticky_posts_to_top($posts) {
    $stickies = array();
    foreach($posts as $i => $post) {
        if(is_sticky($post->ID)) {
            $stickies[] = $post;
            unset($posts[$i]);
        }
    }
    return array_merge($stickies, $posts);
}
由于您将查询限制为6篇帖子,我预计不会对处理时间产生任何重大影响。您还可以在函数中添加额外的检查,这样这个过滤器只会在您使用特定查询时运行(尽管如果您不这样做,我能想象到的最糟糕的情况是WP已经做了一些事情)。

希望有帮助!让我们知道进展如何。

结束

相关推荐