投稿に一定期間表示させたい内容をつける方法【WordPress】

投稿記事に一定期間だけ何かしら表示させたい場合や、日時を指定して表示内容を変えたい場合などに利用できるコード作りのメモです。

新規記事にNEWマークをつける

一定期間表示させることのよくある例としては、新規の記事にNEWマークをつけること。

テンプレートファイルに以下のようにPHPコードを記述することで「NEW」というテキストを表示させることができます。
このサンプルコードの場合は時間で判別し、投稿日から10日間「NEW」というテキストが表示されます。

$days = 10; // New を表示させたい期間の日数
$now = date_i18n('U'); // 現在のUNIX時間を取得
$entry = get_the_time('U'); // 投稿のUNIX時間を取得
$total = date('U',($now - $entry)) / 86400; // 86400は秒数で1日
if($days > $total) {
  echo 'New';
}

date('U',($now - $entry)) / 86400 というところでその記事が投稿日から何日経っているかが計算されます。
if($days > $total) とすることで、 $total (経過した日数)が $days に設定した数字より小さければ表示するというコードです。

UNIXタイムスタンプとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

【ループ内で使用するコード例】

<ul class="post_list_wrap">
  <?php while(have_posts()): the_post(); ?>
    <li class="post_item"><a href="<?php the_permalink(); ?>">
      <span class="new_mark">
        <?php
          $days = 10;
          $now = date_i18n('U');
          $entry = get_the_time('U');
          $total = date('U',($now - $entry)) / 86400;
          if($days > $total) {
            echo 'New';
          }
        ?>
      </span>
      <h2><?php the_title() ?></h2>
      <p><?php echo mb_substr(get_the_excerpt(), 0, 60) . '...'; ?></p>
    </a></li>
   <?php endwhile; ?>
</ul>

class をつけてCSSで見た目を調整すれば完成です。

日付を指定して表示させる

例えばイベントなどの案内があるサイトで、イベントは終わっているが記事は残しておきたいので終了していることを表示させたいといった場合。

カスタムフィールドで終了日を設定して、今日の日付より過ぎていたらテキストを表示させる、というサンプルコードです。

<?php
  $end_date = get_field('end_date');
  $today = date_i18n('Ymd');
  if ($end_date) {
    if ($end_date < $today) {
      echo 'このイベントは終了しました';
    }
  }
?>

ここでは、終了日を設定するカスタムフィールドは Advanced Custom Fields (ACF) を使用しています。

ACFでは以下のように設定しています。

開始日も設定すれば「開催前」「開催中」「終了」といった3段階の表示も可能です。

<?php
  $start_date = get_field('start_date');
  $end_date = get_field('end_date');
  $today = date_i18n('Ymd');
  if ($start_date > $today) {
    echo '開催前';
  } elseif ($end_date < $today) {
    echo 'このイベントは終了しました';
  } else {
    echo '開催中';
  }
?>

カテゴリー : WordPress

TOPへ