如果当前日期和月份不存在帖子,则显示下一个可用帖子日

时间:2017-07-30 作者:onebitrocket

我正在写一个关于这一天的函数,它应该显示当前日期和月份的X个帖子数。

如果没有帖子,如何向查询中添加回退,以显示下一天可用的帖子?

这些是我传递给当前查询的参数。

    $onThisDay_args = array(
      \'post_type\' => array(\'on-this-day\'),
      \'posts_per_page\' => $postlimit,
      \'date_query\' => array(
        array(
          \'month\' => date( \'n\', current_time( \'timestamp\' ) ),
          \'day\' => date( \'j\', current_time( \'timestamp\' ) )
        ),
      )
    );
我能想到的执行此要求的唯一方法是,如果第一个查询的结果等于null或0,则运行第二个查询。

如果是这种情况,如何修改date\\u query参数以回退到前一天的可用帖子?

谢谢

1 个回复
SO网友:birgire

如何解决这个问题在很大程度上取决于您如何存储它。

一般来说,我知道让WordPress处理历史日期,范围广泛,作为发布日期。您可以在本网站或trac上查看各种限制。

Date query for yesterday

如果使用以下对象创建datetime对象:

 $dto = DateTime::createFromFormat( \'Y-n-j\', current_time( \'Y-n-j\' ) );
其中,时区包括在current_time(), 然后,您可以尝试使用以下方法将其设置为日期之前的日期:

 $dto->modify( \'yesterday\' );
昨天的月和日应可通过以下方式访问:

\'date_query\' => [
    [
        \'month\' => $dto->format(\'n\'),
        \'day\'   => $dto->format(\'j\'),
     ],
],
两天之后我们才能尝试

$dto->modify( \'-2 days\' );
等等

Date query for the current date or the previous available date

如果对所有事件使用同一年,则可以使用:

\'date_query\' => [
    [
        \'before\'      => current_time( \'Y-n-j\' ),
        \'inclusive\'   => true,
     ],
],

Alternatives

对于一个非常稀疏的月日列表,可以尝试按月和日对帖子进行分组,以找到以前可用的帖子日期。但这需要一个自定义查询。

也可以使用自定义数据库表来存储日期,以获得更大的灵活性,但这也需要自定义构建。

许多事件插件将日期存储在post meta中,并使用meta_query 在里面WP_Query 过滤掉它。但对于大量的帖子来说,这可能无法很好地扩展。

我们甚至可以使用自定义分类法来存储月日,但这样的话,月日排序可能会变得棘手。

结束

相关推荐

Sort posts in a specific way

我目前有6个职位属于“服务”类别。每个服务都有\\u内容和1-2个文档(小册子和/或T&C以及外部表单)现在,假设这6篇文章的ID为1,2,3,4,5,6,但我希望它是2,5,3,1,4,6。这可能吗?如果是,我将如何实现它?