はじめに
WordPressの標準「カレンダー」ウィジェットは、クリックするとその日の投稿一覧(アーカイブページ)へ遷移します。
しかし、投稿が1件しかない場合、わざわざ一覧を経由するのはユーザーにとって手間でしかありません。
そこで、その日の投稿が1件のみであれば、一覧ページをスキップして直接その記事へジャンプさせます。
この記事では、この方法について説明します。
完成イメージ
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件しかない日にわざわざアーカイブページを挟む必要がなくなるため、訪問者が迷うことなく目的の記事にスムーズにアクセスできるようになります。
