WordPressは元々、未来の日付の投稿を公開できない。(予約投稿状態となり、その日付が来たときに公開される)。これを解消するためにno-future-postsというプラグインを利用した。
そうすると首尾よく未来の日付の投稿も公開にできた。が、RSSの出力も当然未来の日付となる。このRSSについては本日までの日付の投稿に限って出力させたいというニッチなリクエストがあり、結局プラグインを作成した。
最終的にプラグインとしたが、実際はfunction.phpでも動作するのでは、と思います。
function future_feed_hide( $where ) {
if (is_feed() ) {
$where .= " AND post_date < '" . date( 'Y-m-d', strtotime( '+1 days' ) ) . "'";
}
return $where;
}
add_filter( 'posts_where', 'future_feed_hide' );
?>
単純なフィルターで出来た。初心者ならではなのですが、これを作った時に躓いたのはreturnの位置でした。最初にif文内でreturnさせていると、RSS以外の出力がへんなことに。色々と原因を探っていて、is_feedが判別できていないのではとか考えたのですが、関数なので何らかのreturnをさせることが必要だったようで、return $where;をif外に出したらあっさりと解決。
関数はreturnが必要。時間かかりすぎたけどプラグインの基本もわかったので勉強になりました。