「カレンダー」ウィジェットで投稿が1件しかない日は直接記事へジャンプさせる方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

WordPressの標準「カレンダー」ウィジェットは、クリックするとその日の投稿一覧(アーカイブページ)へ遷移します。
しかし、投稿が1件しかない場合、わざわざ一覧を経由するのはユーザーにとって手間でしかありません。

そこで、その日の投稿が1件のみであれば、一覧ページをスキップして直接その記事へジャンプさせます。

この記事では、この方法について説明します。

完成イメージ

2023-09
月 火 水 木 金 土 日
 123
45678910
11121314151617
18192021222324
252627282930  

2023年9月30日は投稿が1件です。

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('get_calendar', function ($calendar) {

  // 日付リンクから年月日を取得
  return preg_replace_callback(
    '#<a href="[^"]*/(\d{4})/(\d{2})/(\d{2})/"#',
    function ($m) {

      // その日の公開済み投稿を最大2件取得
      $ids = get_posts([
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => 2,
        'fields'         => 'ids',
        'date_query'     => [[
          'year'  => (int) $m[1],
          'month' => (int) $m[2],
          'day'   => (int) $m[3],
        ]],
      ]);

      // 投稿が1件なら個別投稿のURLに差し替え
      return count($ids) === 1
        ? '<a href="' . esc_url(get_permalink($ids[0])) . '"'
        : $m[0];
    },
    $calendar
  );
});

さいごに

今回紹介した方法を使えば、標準の「カレンダー」ウィジェットで投稿が1件しかない日にわざわざアーカイブページを挟む必要がなくなるため、訪問者が迷うことなく目的の記事にスムーズにアクセスできるようになります。

タイトルとURLをコピーしました