Ownedmedia ウェブ制作に役立つコンテンツを発信中!

WordPress 2021.02.09

WordPressで独自のクエリパラメータを追加してGET値で記事を分類表示させる

Tags: ,

WordPressでは投稿記事をカテゴリやタグなどの分類でアーカイブさせることがありますが、通常であれば分類ごとにパーマリンクURLが生成されて、そこにアクセスすることで自動的にアーカイブされるようになっています。ただ、クエリパラメータを使って記事を分類させたい場合もあります。そのような場合の対応を備忘録として残しておきたいと思います。

 

今回は、カスタム分類のアーカイブをメインループではなく、クエリパラメータをGETの値として取得し、それを元にサブループを使って出力する方法を見ていきます。

 

カスタムクエリパラメータを追加

今回の場合にはまず独自のクエリパラメータとして追加する必要があります。functions.phpに下記のようにコードを追記します。今回は2つのパラメータを追加していますが、1つの場合には直接パラメータを代入する形で問題ありません。「query_vars」のフィルターフックで実行するようにします。

【functions.php】

function add_custom_query_vars($query_vars) {
  $querys = array(
    'category',
    'tags'
  );
  foreach($querys as $val){
    $query_vars[] = $val;
  }
  return $query_vars;
}
add_filter('query_vars', 'add_custom_query_vars');

 

このように独自のクエリパラメータを追加しておかないと、クエリ文字列のあるURLでアクセスした時に404エラーとなってしまいます。ですので、まずはクエリパラメータを追加するところから始めていきます。

 

パラメータをGET値として取得しサブループで出力

続いて、クエリパラメータを取得してからサブループで出力する部分を作成していきます。今回はアーカイブ用のページテンプレートに記述していきますので、メインループと切り分けるためにGET変数がある場合のみ実行されるようにしておきます。

 

先ほどクエリパラメータを追加しているので、その追加したパラメータは「get_query_var()」メソッドでキーを指定することで取得できるようになっています。今回は2つ作成しているので、それごとに分岐されるようにしておき、サブループ用のパラメータをそれぞれ指定していきます。ここではカスタム投稿(blog)でカスタム分類(blog_category、blog_tag)を対象に、そのターム名としてクエリパラメータを使う例で見ていきます。

【archive.php】※一部抜粋

<?php if(!empty($_GET)): ?>
  <?php
    if(get_query_var('category')) {
      $args = array(
        'post_type' => 'blog',
        'tax_query' => array(
          array(
            'taxonomy' => 'blog_category',
            'field' => 'slug',
            'terms' => get_query_var('category')
          )
        )
      );
    } else if(get_query_var('tags')) {
      $args = array(
        'post_type' => 'blog',
        'tax_query' => array(
          array(
            'taxonomy' => 'blog_tag',
            'field' => 'slug',
            'terms' => get_query_var('tags')
          )
        )
      );
    } else {
      $args = array(
        'post_type' => 'blog'
      );
    }
    $the_query = new WP_Query($args);
    if($the_query->have_posts()):
  ?>
    <?php while($the_query->have_posts()): $the_query->the_post(); ?>

      <!-- 投稿記事の内容 -->

    <?php endwhile; ?>
  <?php else: ?>
    <p>投稿記事がありません</p>
  <?php endif; ?>
<?php endif; ?>

 

こうすることで、クエリパラメータの値を取得してそれをターム名としてサブループで出力することができました。ちなみにですが、クエリパラメータがある場合に「$wp_query」のオブジェクトとの中身を見てみますと、このようにカスタムのクエリパラメータとしてきちんと認識されていることが確認できます。

WP_Query Object
  (
    [query] => Array
      (
        [post_type] => blog
        [category] => ブログカテゴリ1
      )
    [query_vars] => Array
      (
        [post_type] => blog
        [category] => ブログカテゴリ1
        .........
      )
    .........
  )

 


 

ここではカスタム分類のアーカイブを例に挙げていますが、これ以外にもGETの値を自由に組み合わせた絞り込み検索なども可能になります。複雑な検索機能を使う場合には役に立つのではないでしょうか。

 

(参考にさせていただいたサイト)
カスタムクエリの追加方法と一緒に追加しておきたい関数やフックなど

この記事を書いた人

オガワ シンヤ

合同会社デザインサプライ代表兼CEO / ディレクター・ウェブデザイナー・フロントエンドエンジニアをやっています。「ウェブとデザインでヒト・モノ・サービスを繋げ新しい価値を生み出す」をコンセプトに日々奮闘中!制作中はチョコレートが欠かせない三十路Webクリエイター。

  • Twitter

コメントフォーム

記事に関するご質問やご意見などありましたら下記のコメントフォームよりお気軽に投稿ください。なおメールアドレスは公開されませんのでご安心ください。

内容に問題なければ、お名前・ハンドルネームとメールアドレスを入力いただき、下記の「コメントを送信」ボタンを押してください。

CAPTCHA


この記事もよく読まれています

Scroll to Top
ご質問・ご相談はありませんか ?