投稿の日付を未来に設定した場合に、投稿のステータスを強制的に公開済みにするためには、functions.phpを編集する方法と、プラグインを使用する方法があります。

functions.phpを編集する方法

コードの編集

ウェブサーバのWordPressをインストールしているフォルダの中functions.phpを開き、一番下に次のコードを追加します。

今回は、関数名を「future_post_to_publish」としていますが、任意の文字列を設定してかまいません。(3行目)

パラメータに$dataを指定しているので、ここではpost dataが読み込まれます。

$data['post_type']は投稿タイプ、$data['post_status']は投稿ステータスを指します。

ここでは、投稿タイプが通常投稿(post)、投稿ステータスが予約済み(future)の場合を条件としています。(4行目)

その条件に該当する投稿だった場合、投稿ステータスを公開済みに変更しています。(5行目)

≪参考≫

もし、カスタム投稿タイプで同様の設定を行う場合は、

  $data[‘post_type’] == ‘post’

の部分を、

  $data[‘post_type’] == ‘post_type_id’

などとします。

post_type_idの部分には、投稿タイプIDを入れます。

変更した内容を呼び出し元へ返却しています。(7行目)

add_filterは、APIのフィルターフックを呼び出していますが、呼び出した時に自作した関数を紐付けて呼び出すようにしています。(9行目)

3行目で設定した関数名を9行目にも指定します。

実際に未来の日付で投稿すると、[予約…]ボタンになるので一見予約投稿に見えますが、きちんと公開されるので問題はありません。

投稿ステータスの種類

投稿ステータスの種類は次の通りです。

  • 'publish': 公開済み
  • 'pending': 承認待ち
  • 'draft': 下書き
  • 'auto-draft’: 新規作成された投稿(まだコンテンツが無い)
  • 'future': 予約済み(未来に投稿)
  • 'private': 非公開
  • 'inherit': リビジョン(記事の変更履歴)
  • 'trash': ゴミ箱にある投稿

応用する時のヒント

上記の例では、すべての投稿に対して機能するので、例えば個別のカスタム投稿にのみ機能させたい場合は、post_typeの条件をカスタム投稿のスラッグに変えます。

また、イベント情報の場合、未来日付を公開にして、過去日付になった場合は開催終了となるので非公開にしたいというニーズもあると思います。

今回の方法では、投稿時(公開時・予約投稿時など)のタイミングでしか動作しないため、この場合は、投稿記事全体を取得するタイミングでチェックし、該当するデータを書き換えるというやり方になります。

プラグインを使用する方法

プラグインのインストールと設定

SchedulePressプラグインをインストール&有効化します。

管理画面の左側にSchedulePressプラグインのメニューが表示されるので、[Setting]で[Show Publish Post Immediately Button]のトグルスイッチをONにし、[Save Changes]をクリックして設定を保存します。

日付を未来に設定した投稿のステータスを公開済みにする

投稿を作成し、日付を未来に設定して[保存]をクリックします。

[ステータス]が[予約済み]になり、投稿のSchedulePressプラグインのメニューに[Publish future post immediately]というチェックボックスが現れるので、チェックを入れます。

[Current Date]及び[Future Date]という2つのボタンが表示されるので、[Future Date]というボタンをクリックします。

すると、投稿のステータスが[公開済み]となり、未来の日付で投稿を公開することができます。

まとめ

WordPressの投稿を未来の日付で公開する方法についてまとめました。
通常の投稿では未来の日付を指定して投稿するとステータスが"予約投稿"となってしまいますが、この方法でステータスを公開とすることができます。
functions.phpを編集する方法の場合、逆に予約投稿ができなくなってしまいますので、通常の投稿は予約投稿できるようにしておき、カスタム投稿について未来日付を公開できるようにしておくのも一つの方法です。
SchedulePressプラグインを使用する方法の場合、一つ一つの投稿に対して任意に未来の日付を指定して公開することができます。