一覧では今年の投稿のみを表示し、アーカイブでは過去投稿だけを表示する方法

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

完成イメージ

実装手順

以下の手順で実装します。

  • ラベル
    PHPを追加(アーカイブを年表示)

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

    add_filter('widget_archives_args', function ($args) {
      $args['type'] = 'yearly';
    
      return $args;
    });
  • ラベル
    PHPを追加(過去年のみアーカイブに表示)

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

    add_filter('getarchives_where', function ($where, $args) {
      global $wpdb;
    
      // 現在の年を取得
      $current_year = date('Y');
    
      // 現在の年を除外する条件を追加
      $where .= $wpdb->prepare(" AND YEAR(post_date) < %d", $current_year);
    
      return $where;
    }, 10, 2);

    例えば、現在が2025年で2025年の投稿がある場合、アーカイブリストには2024年以前の投稿のみが表示されます。

  • ラベル
    PHPを追加(現在年のみを投稿一覧に表示)

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

    add_action('pre_get_posts', function ($query) {
      if (is_admin() || !$query->is_main_query()) {
        return;
      }
    
      if ($query->is_home()) {
        $year = current_time('Y');
    
        $query->set('date_query', [
          [
            'year' => $year,
          ],
        ]);
      }
    });

    例えば、現在が2025年で、2024年までの投稿しかない場合は、投稿一覧には「投稿が見つかりませんでした。」と表示されます。

さいごに

2025年の場合、投稿ページのページ送りに2024年の投稿が表示されることがあります。
これを防ぎ、2025年の投稿のみを表示するには、もう一工夫が必要です。
今回は、WP_Query()の多くのパラメータの中から、表示期間を指定するパラメータを試してみました。

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