フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【WordPress】カスタムフィールドで記事の公開期間を限定する方法

Advanced Custom Fields (ACF)
WordPress
カスタムフィールド
クエリ
公開期間

WordPressの投稿は公開されているものは主導で非公開や削除しなければ、公開されたままとなります。
しかし、キャンペーンの告知など公開期間を指定したいということも考えられます。
WordPressの投稿の場合、予約投稿機能を使うことで公開する日時は指定することが出来ますが、非公開にする日時は標準機能のままでは指定することが出来ません。
公開期間を限定するプラグインは存在していますが、今回はこういったプラグインは使わず、
公開開始日と公開終了日をカスタムフィールドで指定して公開期間を限定する方法をご紹介したいと思います。

カスタムフィールドで記事の公開期間を限定する方法

【手順1】カスタムフィールドを作成する

まずは掲載期間を指定するための公開開始日と公開終了日を指定するカスタムフィールドを作成します。
今回は「Advanced Custom Fields (ACF)」を使ってカスタムフィールドを作成します。

公開開始日のカスタムフィールドは以下のように作成します。

フィールドタイプは「日付選択ツール」を使用し、戻り値の形式はYmdとなるようにします。
その他の項目は任意で問題ないですが、この記事ではフィールド名を「start」としています。

続いて、公開終了日のカスタムフィールドは以下のように作成します。

こちらもフィールドタイプは「日付選択ツール」を使用し、戻り値の形式はYmdとなるようにします。
その他の項目は同様に任意で問題ないですが、この記事ではフィールド名を「end」としています。

このように公開開始日と公開終了日の二つのカスタムフィールドを作ります。

そして、このカスタムフィールドを表示する投稿画面は以下のようになります。

【手順2】クエリを記述する

続いて、カスタムフィールドで指定した公開開始日~公開終了日までの期間に該当する記事のみを取得するクエリを記述します。

そのクエリは以下の通りです。

公開開始日のフィールド名は「start」、公開終了日のフィールド名は「end」としています。

<?php
$today = date('Ymd');
$args = array(
    'post_type' => 'news',
    'posts_per_page' => 10,
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'start',
            'value' => $today,
            'compare' => '<=',
            'type' => 'DATE'
        ),
        array(
            'key' => 'end',
            'value' => $today,
            'compare' => '>=',
            'type' => 'DATE'
        )
    ),
);
$query = new WP_Query( $args );
if( $query->have_posts() ):
    while( $query->have_posts() ):
    $query->the_post();
?>
    <div class="post">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </div>
<?php endwhile; endif; wp_reset_postdata(); ?>

このクエリを記述することで公開開始日~公開終了日までの期間に該当する記事のみを取得することが出来ます。

$today = date('Ymd');

カスタムフィールドの戻り値をYmdの形式を指定したのは、クエリで指定する今日の日付をYmdの形式で取得して比較するためです。
この部分の形式を揃えて比較することが出来ればカスタムフィールドの戻り値の形式は何でも構いません。

まとめ

いかがでしたか?
公開期間を限定することが出来れば、非公開にする日をいちいち覚えておいて、当日非公開にする作業をする手間が省けます。
また、ついうっかりしていて、非公開にするのを忘れてしまったというトラブルを防ぐことも可能です。
公開期間を限定したいという場合は是非このコードをコピペして使用してみて下さい。