WordPressの記事ループ

## 記事一覧ページの仕様
- 最新年の記事のみを表示させたい。
- 複数カテゴリをまとめたい。
- 最新年より前の記事は、バックナンバーページでまとめたい。
- カテゴリごとにラベルの背景やテキストを変える。

## 最新年の記事のみ表示

```php:archive.php（テーマファイル上）

<!-- 例：
 カテゴリ名→「カテゴリ１」　　「カテゴリ２」　　「カテゴリ３」
　　スラッグ名→「category1」 「category2」 「category3」
-->　　

<div　id="newsList">
  <?php
    $year = date('Y'); //現在の年を取得
  ?>
  <?php
    // 表示記事の条件指定（パラメータ）
    $args = array(
      //　カテゴリを指定
      'category_name' => 'sample1, sample2, sample3', 

      //　表示させる記事の期間を指定
      'date_query' => array(
                        array(
                          'year' => $year,
                        ),
                      ),
      'paged' => $paged,
    );
    $paged = (int) get_query_var('paged');
    $the_query = new WP_Query($args);
  ?>
  <?php if ($the_query->have_posts()): while ($the_query->have_posts()): 
    $the_query->the_post();
  ?>
  <dl>
    <dt>
      <?php the_time('Y.m.d');?>　　<!-- 記事の年月日を表示 -->
      <span class="tag 
        <?php
          // オブジェクト（カテゴリー）の配列を取得
          $cats = get_the_category(); 
    
          // 配列を反復処理。
          // この処理を行わないと複数カテゴリの出力ができない。 
          foreach ($cats as $cat):
            if ($cat->parent) {
              // オブジェクト（カテゴリー）の配列からスラッグ名を取得して文字列として出力
              // class名をスラッグ名と一致させ、カテゴリ毎のラベル背景を変える
              echo $cat->category_nicename;
            }
          endforeach;
        ?>">
　　　　　　　　　　　　　　　　<?php
          $cats = get_the_category();
          foreach ($cats as $cat):
            if ($cat->parent) {
              // オブジェクト（カテゴリー）の配列からカテゴリ名を取得して文字列として出力
              echo $cat->cat_name;
            }
        endforeach;?>
　　　　　　　　　　　　</span>
    </dt>
    <dd>
      <a href="<?php the_permalink($post); ?>"> <!-- パーマリンク（詳細記事ページのURL）を取得 -->
        <?php echo get_the_title(); ?> <!-- 記事のタイトルを取得 -->
      </a>
    </dd>
  </dl>
  <?php endwhile; endif; ?>
  <!-- / newsList -->
</div>
```

```html:archive.php（出力後）

<!-- 例：
 カテゴリ名→「カテゴリ１」　　「カテゴリ２」　　「カテゴリ３」
　　スラッグ名→「category1」 「category2」 「category3」
-->　　

<div id="newsList">
  <dl>
    <dt>2018.12.０１
      <span class="tag sample01">カテゴリ１</span>
    </dt>
    <dd>
      <a href="カテゴリ１のパーマリンク">カテゴリ１タイトル</a>
    </dd>
  </dl>
  <dl>
    <dt>2018.1１.０１
      <span class="tag category２">カテゴリ２</span>
    </dt>
    <dd>
      <a href="カテゴリ２のパーマリンク">カテゴリ２タイトル</a>
    </dd>
  </dl>
  <dl>
    <dt>2018.1０.０１
      <span class="tag category３"></span>
    </dt>
    <dd>
      <a href="カテゴリ３のパーマリンク">カテゴリ３タイトル</a>
    </dd>
  </dl>
  <!-- / newsList -->
</div>

```

## 最新年より前の記事表示

専用の固定ページを作成し、そのテンプレートファイルに「表示させる記事の期間」を変更したループを記述する。

```php:page-back.php（テーマファイル上）

      //　表示させる記事の期間を指定
      'date_query' => array(
                        array(
                          'before'  => $year. '/1/1',
                        ),
                      ),

```

date_queryの「'before'」は、「〜より前の記事を表示する」ためのパラメータ。
今年1月1日より前の記事を表示する。 ＝ 昨年12月31日以前の記事が表示されるようになる。

## 副産物

諸々徘徊していて、PHP初心者の自分にとって知れてありがたいと思ったのが「デバック方法」。
JavaScriptでいうところの「console.log();」「alert('');」のようなものはないものか・・・とちょうど思っていたのでありがたいです。

```html:test.php（）
<?php
  $test = 'テストです。';
  print_r($test);
?>
```

初見ですが「わぃおがわ」さんありがとうございます。↓↓↓
[◾️WordPressの投稿でカテゴリー名（複数）を取得して表示する - わぃおがわ](https://yogawa.com/post-3806)

上級者にとっては当たり前のことでも省略せずに書いてあるととてもありがたいです。
（そもそも自分が知らなすぎただけですが・・・！）
自分もなるべく細かく書くよう心がけます。


## 参考

解決までに徘徊したサイトをいくつか載せておきます。

[◾️関数リファレンス/WP Query - WordPress Codex 日本語版](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query)

[◾️WordPressで日付の範囲指定をして記事を表示する方法 | それからデザイン スタッフブログ](https://sole-color-blog.com/blog/282/)

[◾️WordPressの投稿でカテゴリー名（複数）を取得して表示する - わぃおがわ](https://yogawa.com/post-3806)