申込みフォームなどを期間限定公開したいときどうするでしょうか?
例えばContact form7とかで期間限定の申し込みフォームを設置して、期限が来たらフォームを表示させないようにしたいという場合がありますよね。また、部分的にではなく、記事やページそのものを非公開にしたいこともあるかもしれません。
この記事では、Wordpressを使用したコンテンツで、期限が来たら非公開にしたい、そんな時の方法についてご紹介します。
記事やページを期間限定で非公開にする
プラグインを使う方法
記事の公開非公開などをあるタイミングで変更するプラグインがあります。プラグインは探せばいろいろ出てきますが、余り需要が無いのか選択肢はあまりないです。
良く紹介されているのが『Post Expirator 』 というプラグインです。
wp-cronを使って動くので、プラグインを導入してもサーバーへの負荷は少ないというのが売りだと思いますが、反面動かないサーバーもあると思います。
プラグイン化されているので、オプションは豊富なのでとりあえずインストールしてみると、やりたいことは出来ると思います。
Post Expiratorプラグインを使用すると、投稿と固定ページの両方に有効期限を設定できます。 投稿を期限切れにする方法はいくつかあります。
- 下書き
- 削除
- ゴミ箱
- Private
- Stick
- Unstick
- カテゴリー:置き換え
- カテゴリー:追加
- カテゴリー:削除
ショートコードを使う方法
ショートコードを使って記事の公開非公開をあるタイミングで切り替える方法もあります。
カスタムフィールドで日時を指定して表示切替
function my_close_time_filter($content) {
if (get_post_meta(get_the_ID(), 'close_time', true) != ''
&& date_i18n('Y-m-d H:i:s') > get_post_meta(get_the_ID(), 'close_time', true)) {
$content = '<p>この記事は表示期限を過ぎました</p>';
}
return $content;
}
add_filter('the_content', 'my_close_time_filter');
カスタムフィールドで日時を指定して投稿状態を切り替える
function my_expire_event($pid) {
if (get_post_meta($pid, 'close_time', true) != ''
&& date_i18n('Y-m-d H:i:s') < get_post_meta($pid, 'close_time', true)) {
// 設定されていて未来の日付ならスケジュールをセット
$time_stamp = strtotime(get_post_meta($pid, 'close_time', true) . ' JST');
wp_schedule_single_event($time_stamp, 'my_new_event', array($pid));
}
}
add_action('save_post','my_expire_event');
// スケジュールされる動作を記述
function my_update_post($pid) {
wp_update_post(array( 'ID' => $pid, 'post_status' => 'trash' ) );
}
add_action('my_new_event', 'my_update_post');
記事の一部分を期間限定公開する方法
Post Expiratorはショートコードはありますが、公開期限などを表示するためのもので、 部分的な公開非公開には対応していません。
記事やページの一部分だけ、期間限定公開するためのショートコードがあります。
使い方
ショートコードの引数として term(公開期限の日時)と、after(公開終了後のメッセージ)を指定することができます。
- term:必ず指定します。書式はYYYYMMDD0000
- after:指定しなくても公開終了のメッセージが表示されます。初期値(イベントは終了しました。)
- 公開する内容もショートコードを指定することができるので、フォームなどのショートコードで表示させている内容に対しても適用できます。
使用例
例1:公開期限 2018年1月1日0:00分(12/31日まで公開)
[display_none term="201801010000" after="公開終了"] 限定公開する内容 [display_none]
例2:ショートコードをネスト(2019/12/22日まで公開)
[display_none term="201912230000"]
[contact-form-7 id="479" title="タイトル"]
[/display_none]
ソースコード
function dnoneFunc( $atts, $content = null ) {
//data関数だけだと9時間のズレが生じる場合があるので
date_default_timezone_set('Asia/Tokyo');
// 現在時間を取得(年月日時分を取得)
$now = date('YmdHi');
// 期間と期間過ぎた後のテキスト(デフォ)を設定
extract(shortcode_atts(array(
'term' => '',
'after' => 'イベントは終了しました。'
), $atts));
if($now < $term){
// 指定日時過ぎてない(表示する)
$content = do_shortcode( shortcode_unautop( $content ) );
}else{
// 指定した日時過ぎた(表示しない)
$content = $after;
}
return $content;
}
add_shortcode('display_none', 'dnoneFunc');
まとめ
この記事では、記事やページの期間限定公開や、記事やページの一部を限定公開する時に使える情報をまとめました。
特に部分的に公開できるショートコードは、必要に迫られて作ったので、使える場面が結構あると思います。