将RSS订阅源限制为上一个日历月

时间:2018-06-27 作者:Emrys

我想过滤我的RSS提要,只显示上个日历月的帖子。我的主题函数文件中有此代码,但它不工作?

// filter the RSS feeds to show only the last calendar month
$lastMonthNumber = date( \'n\', current_time( \'timestamp\' ) ) - 1; // work out the previous month number
function feedFilter($query) {
  if ($query->is_feed) {
    $query->set(\'date_query\', array(
        array(
           \'month\' => $lastMonthNumber
           //\'month\' => 5
        )   
    ));
  }

  return $query;
}
add_filter(\'pre_get_posts\',\'feedFilter\');`

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

这种方法不适用于1月份:

$lastMonthNumber = date( \'n\', current_time( \'timestamp\' ) ) - 1; 
因为它会给1 - 1 = 0.

下面是另一个建议,使用字符串来支持日期查询的时间:

$query->set( \'date_query\', [ 
    [ 
        \'after\'     => \'midnight first day of last month\', 
        \'inclusive\' => true,
    ], 
    [ 
        \'before\'    => \'midnight first day of this month\', 
        \'inclusive\' => false, 
    ]  
] );
例如,这应生成:

wp_posts.post_date >= \'2018-05-01 00:00:00\' AND wp_posts.post_date < \'2018-06-01 00:00:00\'
如果当天是2018年6月27日。

请注意pre_get_posts 是一个动作,而不是过滤器。

结束