WP_QUERY POSTS_PER_PAGE奇怪的缓存

时间:2017-11-11 作者:Anton Lukin

我想使用posts\\u per\\u页面限制进行自定义查询循环。

<?php
    $news = get_category_by_slug(\'news\');

    $sidebar_related = new WP_Query([
            \'category__not_in\' => [$news->term_id],
            \'post__not_in\' => [$post->ID],
            \'posts_per_page\' => 4,
            \'post_status\' => \'publish\'
    ]);

    if($sidebar_related->have_posts()) :
        while($sidebar_related->have_posts()) : 
            $sidebar_related->the_post();

            the_title();

        endwhile; 

        wp_reset_postdata();
    endif; 
这段代码返回10条(或其他值)帖子,而不是4条。

$sidebar_related->request 显示

“从wp\\u posts中选择SQL\\u CALC\\u FOUND\\u ROWS wp\\u posts.ID,其中1=1,wp\\u posts.ID不在(15190)和(wp\\u posts.ID不在(从wp\\u term\\u relationships中选择object\\u ID,其中term\\u taxonomy\\u ID在(620))和wp\\u posts.posts.type=\'post\'和((wp\\u posts.post\\u status=\'publish\'))GROUP BY wp\\u posts.ID ORDER BY wp\\u posts.posts.post\\u date DESC LIMIT 0,4”

如你所见,有限制4。但是$sidebar_related->posts 显示包含11个元素的数组。

我已尝试删除所有插件:nothing happens works correctly 我已尝试删除所有缓存(对象缓存、wp\\u查询缓存):nothing happens category__not_in arg到category__in: works correctlywp_reset_postdata(); 循环之前:nothing happens

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

好了,我终于找到了原因。

我们必须忽视sticky posts 在WP\\U查询中,使用以下方式:

 $sidebar_related = new WP_Query([
            \'category__not_in\' => [$news->term_id],
            \'post__not_in\' => [$post->ID],
            \'posts_per_page\' => 4,
            \'post_status\' => \'publish\',
            \'ignore_sticky_posts\' => \'1\'
    ]);
我希望它能帮助别人。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post