投稿に公開期限を設定する
WordPressでは公開日時を未来の日時にすることで予約投稿を行うことができますが、公開期限を設定することは標準ではできません。
公開期限を設定するには、下記のいずれかで設定します。
プラグインなしで設定する
プラグインなしで設定する場合は、下記のようにします。
1. functions.phpに下記のように記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/** * 投稿が保存されたときに公開期限の予定を設定するサンプルです。 */ function post_expire_schedule( $id ) { // 投稿が見つからない場合は処理を終了します。 $post = get_post( $id ); if ( ! $post ) return; // 投稿が固定ページなど投稿以外の場合は処理を終了します。 if ( 'post' != $post->post_name ) return; // すでに予定の設定があれば除去します。 $timestamp = wp_next_scheduled( 'post_expire', array( $id ) ); if ( false !== $timestamp ) { wp_clear_scheduled_hook( 'post_expire', array( $id ) ); } // 公開状態でない場合(すでに非公開など)は処理を終了します。 if ( 'publish' != $post->post_status ) return; // 公開日時の5分後に非公開にします。 // ※ サンプル用です。実際には+30 days(30日)など長くするか、カスタムフィールドで公開期限欄を設けるなどします。 // ※ 設定する日時はUTC(世界標準時)です。日本時間(JST)からは-9時間したものをセットしてください。 $time = get_post_time( 'U', true, $id ); $expire = strtotime( '+5 minutes', $time ); wp_schedule_single_event( $expire, 'post_expire', array( $id ) ); } add_action( 'save_post', 'post_expire_schedule' ); /** * 投稿を非公開にします。 */ function post_expire( $id ) { // 本文の<iframe>タグなどが除去されてしまう(WP-Cronはユーザーなしで実行される)ため除去されないようにします。 kses_remove_filters(); // 非公開に変更 wp_update_post( array( 'ID' => $id, 'post_status' => 'private' ) ); } add_action( 'post_expire', 'post_expire' ); |
このコードは確認用として「公開日時の5分後に非公開にする」というものになっています。このまま使うものというよりは、これが動作するかどうかを確認してから変更を加えていきます。
2. 必要な変更を行います。
やりたいこと | 変更 |
---|---|
「公開日時の30日後に非公開にしたい」 | 「+5 minutes 」の部分を「+30 days 」にします。 |
「公開日時の月末に非公開にしたい」 | 「+5 minutes 」の部分を「last day of this month 」にします。 |
「公開日時の翌月の1日に非公開にしたい」 | 「+5 minutes 」の部分を「first day of next month 」または「first day of +1 month 」にします。 |
「公開日時の翌月の月末に非公開にしたい」 | 「+5 minutes 」の部分を「last day of next month 」または「last day of +1 month 」にします。 |
プラグインではないため、PHPが分かれば自分のやりたいことに合わせていろいろな変更が加えていけると思います。(カスタムフィールドと連携するなど)
予定の確認
予定が設定されているかどうかは、「WP Crontrol」というプラグインで確認すると便利です。WP Crontrolをインストール・有効化している場合、「ツール」>「Cron Events」から予定が設定されているかがどうかわかります。
(1を記載してテスト投稿を公開したあと、Hook Nameが「post_expire」になっている行があればOKです。Argumentsの「[7181]」となっているところは投稿のIDです)
プラグインで設定する (Post Expirator)
プラグインの「Post Expirator」を使うと、管理画面上で簡単に公開期限の設定ができます。
※あらかじめPost Expiratorをインストールし、有効化してください。日本語化の方法は「Post Expiratorを日本語化する」を参考にしてください。
- 管理画面から公開期限の設定をしたい投稿を開きます。
- 「表示期限の設定をする」にチェックし、期限日時を設定します。
- 「公開」や「更新」で投稿を保存します。
その他
下記はプラグインなしの場合でもあり(Post Expirator)の場合でも起こる可能性があります。(基本的な仕組みがどちらも同じため)
- 動作が9時間ずれる場合は「設定」>「一般」の「タイムゾーン」が「東京」になっているか確認してみてください。
- Basic認証が設定されている場合は期限を設定しても動作しません。(→参考)