在第n个帖子之后应用查询参数

时间:2020-06-22 作者:tzucu79

我似乎找不到这个问题的答案/解决方案。如果有,请发一个链接。

我的理解是wp_query, offset 指查询的结果。所以如果我设置\'offset\' => 4, 它将忽略与参数匹配的前4个帖子。

我感兴趣的是忽略最近的4篇帖子,只运行查询并检查与从第5篇帖子开始的参数匹配的帖子。

这可能吗?

非常感谢。

编辑:

假设我有10篇帖子(从最新到最旧):

第10篇第9篇第8篇第7篇第6篇第5篇第4篇第3篇第2篇第1篇第1篇我们假设我的查询不带任何偏移生成一个包含5篇文章的列表:

无论我如何排序结果,如果我将结果偏移4(同样基于我对如何排序的理解offset 工作),我现在只剩下1个职位。比方说,默认情况下我让它们保持有序。抵消他们给了我一个列表,只有第1个帖子。

然而,如果我在我之前跳过了前4篇帖子,我甚至会;“运行”;查询(将是Post 10、Post 9、Post 8和Post 7)并且只有在运行完该查询之后,才不会偏移结果(所有其他参数保持不变),现在我得到了一个包含4个Post的列表:Post 6、Post 4、Post 3和Post 1。

这就是我想要完成的。

2 个回复
SO网友:mozboz

当然WP查询有很多参数,它们可能可以满足您的需要。

数据排序时通常使用偏移量。因此,如果要忽略最近的两个,需要先按日期降序,然后将偏移量设置为2。无论您是在日期之前还是之后应用任何其他查询参数,都无需先进行偏移,然后再使用其他参数进行第二次查询。

如果希望同一查询同时执行更复杂的操作,还可以向该查询添加其他参数,这将应用于所有结果(偏移量之前和之后,这都可以)。E、 g.搜索搜索时间或选择特定类别的内容或其他内容。但是ordering by date 是帮助您跳过的内容,例如最近的2个。

您可以这样做:

$args = array(
    // order by date
    \'orderby\' => \'date\',
    \'order\'   => \'DESC\',  // descending dates will give you most recent first

    // any extra stuff you want, e.g. search for posts with \'car\' but not \'red\'
    \'s\' => \'car -red\',

    // display posts from the 3rd one onwards, so with date order this will skip two most recent
    \'offset\' => 2
);

$query = new WP_Query( $args );
如果您有更复杂的查询,请发布更多详细信息!

SO网友:mozboz

所以,现在再补充一个答案,我更了解你的情况。使用SQL可能有一种方法可以做到这一点,但使用WP\\U Query可能会更简洁,更符合WP的工作方式:

$excludeArgs = array(
    \'orderby\' => \'date\',
    \'order\'   => \'DESC\',  // descending dates will give you most recent first       
);

$queryExclude = new WP_Query( $excludeArgs );
$excludeThisMany = 4;
$countExclusions = 0;

$excludeIDs = [];

while ($queryExclude->havePosts() && ($countExclusions < $excludeThisMany)) {
    $queryExclude->thePost();
    $excludeIDs[] = the_ID();
    $countExclusions++;
}

$matchArgs = array(
    // whatever you want to match on
    s => \'unicorns -rainbows\'
);

$queryMatch = new WP_Query( $matchArgs );

while ($queryMatch->havePosts()) {
     $queryMatch->thePost();
     if (!in_array(the_ID(), $excludeIDs)) {
           // only get here if it\'s not one of the first exclusions
           // render this stuff
     }
}
那就行了。我无法测试这一点,但希望你能得到这个想法,如果它不完全适合你,你可以修复它。记住添加wp_reset_postdata(); 之后,如果您需要它来返回主帖子的数据。

相关推荐

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

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