イベント情報の投稿に便利!WordPressの未来日付を公開する方法
2023.04.21
WordPressの投稿機能には、未来日付を指定して予約投稿できるという便利な機能があります。
予約投稿すると、指定した日付の当日になると自動的に投稿が公開されるので、記事をストックしておき、定期的にリリースするという使い方ができるので、ブロガーの方には重宝する機能です。
しかし、場合によっては未来の日付をそのままで即時投稿したいという場面も出てくることがあります。
例えば、イベント情報を公開する場合などは、イベントの開催日を未来の日付として設定して、予約投稿ではなくすぐに公開したいというニーズもあります。
でも、このためだけに余計なプラグインは入れたくないという意見もあると思います。
そこで今回は、functions.phpに記述するだけで「未来日付を予約投稿ではなく公開する方法」について紹介していきたいと思います。
未来日付の予約投稿を公開に変更する
未来の日付を指定して投稿すると「予約済み」というステータスとして投稿されます。
この状態だと、指定した日付になるまで公開されないため、未来日付で投稿された場合に強制的に「公開済み」ステータスに変更するのが、以下のコードになります。
functions.php
ファイルに以下の内容を追加します。
<?php
// 予約投稿を公開にする方法
function future_post_to_publish($data) {
if( $data['post_type'] == 'post' && $data['post_status'] == 'future' ) {
$data['post_status'] = 'publish';
}
return $data;
}
add_filter('wp_insert_post_data', 'future_post_to_publish');
?>
上記ソースコードの説明をしていきます。
今回は関数名を「future_post_to_publish」としていますが任意で設定してください。(3行目)
パラメータに$data
を指定しているので、ここではpost data
が読み込まれます。
$data['post_type']
は、投稿タイプ$data['post_status']
は、投稿ステータス
を指していて、投稿タイプが通常投稿、投稿ステータスが予約済みの場合を条件としています。(4行目)
その条件に該当する投稿だった場合、投稿ステータスを公開済みに変更しています。(5行目)
変更した内容を呼び出し元へ返却しています。(7行目)
add_filterは、APIのフィルターフックを呼び出していますが、呼び出された時に自作した関数を紐付けて呼び出すようにしています。(9行目)
3行目で設定した関数名を9行目に指定するところが注意点です。
実際に未来日付で投稿すると「予約…」ボタンになるので一見予約投稿に見えますが、きちんと公開されるので問題ありません。
投稿ステータスの種類
今回の仕組みを理解する上で、投稿ステータスの種類を知っておくと、色々と応用できると思うので、紹介しておきます。
'publish'
:公開済み'pending'
:承認待ち'draft'
:下書き'auto-draft'
:新規作成された投稿(まだコンテンツが無い)'future'
:予約済み(未来に投稿)'private'
:非公開'inherit'
:リビジョン(記事の変更履歴)'trash'
:ゴミ箱にある投稿
応用する時のヒント
上記の例では、すべての投稿に対して機能するので、例えば個別のカスタム投稿にのみ機能させたい場合は、post_type
の条件をカスタム投稿のスラッグに変えると良いです。
また、イベント情報の場合、未来日付を公開にして、過去日付になった場合は開催終了となるので非公開にしたいというニーズもあると思います。
「もし投稿日付が過去日付だったら非公開にする」という処理をしてあげると良さそうですが、今回のプログラムは投稿時(公開時・予約投稿時など)のタイミングでしか動作しないため、すでに投稿済みの記事に対しては動作しません。
この場合、投稿記事全体を取得するタイミングでチェックし、該当するデータを書き換えるというやり方になるため、機会をあらためて紹介してみたいと思います。
まとめ
今回は、WordPressの投稿で未来日付で公開する方法について紹介しました。
通常の投稿では未来日付を指定して投稿すると予約投稿として扱われますが、予約ではなく即時公開とする方法です。
このプログラムを実装すると、逆に予約投稿ができなくなってしまうので、通常の投稿は予約投稿できるようにしておき、カスタム投稿について未来日付を公開できるようにしておくのもひとつの方法です。
この記事をヒントに色々試してみてください!