在同一页面上两次使用WP_Query会得到不同的结果

时间:2018-11-12 17:06:42

标签: wordpress

我正在尝试获取最近的帖子,循环浏览这些帖子,然后再获取其余的帖子。这是我的循环的当前结构:

$recentArgs = array(
    'posts_per_page' => 4,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'post_status' => 'publish',
    'suppress_filters' => true
);

$recentQuery = new WP_Query($recentArgs);

$recent_post_ids = [];
foreach ($recentQuery->posts AS $recentPost) {
    $recent_post_ids[] = $recentPost->ID;
}

然后我循环浏览并执行HTML。然后,我这样做:

<?php wp_reset_query(); wp_reset_postdata(); ?>

我也没有运气尝试过

<?php rewind_post(); ?>

这是第二个WP_Query调用,它返回与上面相同的结果:

$allQuery = new WP_Query([
    'posts_per_page' => 10,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'post_status' => 'publish',
    'suppress_filters' => true,
    'exclude' => $recent_post_ids,
]);

我确定我缺少一些愚蠢/简单的东西。但是,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

也许有更好的方法可以做到这一点,但是我通过使用get_posts()解决了它。因此,现在我的第一个和第二个(带有diff参数)查询看起来像这样:

<?php wp_reset_query(); wp_reset_postdata(); ?>

<?php
$allPosts = get_posts([
    'posts_per_page' => 10,
    'orderby' => 'post_date',
    'order' => 'DESC',
    'post_type' => 'post',
    'post_status' => 'publish',
    'suppress_filters' => true,
    'exclude' => $recent_post_ids,
]);

再次感谢。