WordPressのWP_Queryを使って記事一覧を表示する方法

こんにちは!フリーランスの長野です。

WP_Queryって使っていますか?

WP_Queryを使うと指定した投稿の情報をまとめて取得することができます。

条件を絞って取得することもできます。

この記事では、WP_Queryについて

  • WP_Queryとは?
  • WP_Queryの使い方

といった基本的な内容から、

  • 件数を取得する方法
  • カスタムフィールドで絞り込む方法
  • カスタムタクソノミーの投稿を絞り込み

など具体的な内容についても解説していきます。

今回はWP_Queryについて、わかりやすく解説します。

目次

WP_Queryとは?

WP_Queryとは、WordPressでブログの投稿やページの情報を取得する場合に使うクラスです。

メインループとは別にサブループを作りたいときによく使います。

メインループとは投稿や固定ページなどのページタイトルや本文の内容を表示するためのループのことです。

この他に例えば投稿一覧などを表示するためにはサブループを使います。

このサブループを作りたいときにWP_Queryクラスをよく使います。

WP_Queryクラスには、表示する投稿があるかどうかを判断するhave_postsメソッドや、ループ内で次の投稿に進むthe_postメソッドなどが用意されています。

また、コンストラクタの引数を指定することで取得する投稿の情報を絞り込むことができます。

WP_Queryの使い方

Wp_Queryの一般的な使い方をみていきましょう。

newキーワードを使ってインスタンスを生成し、クエリを定義します。

このときWP_Queryのコンストラクタに引数を指定すると取得する情報を絞り込むことができます。

have_postsメソッドを使って表示する投稿があるかどうか判断し、投稿があれば該当する投稿の数だけwhileループで処理を繰り返します。

whileループ内ではthe_postメソッドを使って次の投稿に進みます

以下が簡単な例になります。

<?php

// クエリの定義
$wp_query = new WP_Query( $args );

// ループ
if ( $wp_query->have_posts() ) {
    while ( $wp_query->have_posts() ) {
        $wp_query->the_post();
        // 処理を記述
    }
}

// 投稿データのリセット
wp_reset_postdata();

?>

件数を取得する方法

WP_Queryクラスには、投稿の件数を取得するpost_countプロパティや、全件数を取得するfound_postsプロパティが用意されています。

使い方の例は以下のとおりです。

 'post'                               //条件を設定
);
$wp_query = new WP_Query($args);                      //条件を入れてサブループを作成
$get_num = $wp_query->post_count;                     //データの中から記事の総数を取得
$all_num = $wp_query->found_posts;                    //データの中から今表示する記事数を取得
echo "全" . $all_num . "件中、" . $get_num . "件を表示";//用意したデータを表示
?>

こうすると、「全50件中、10件を表示」のように出力することができます。

カスタムフィールドで絞り込む方法

それでは、WP_Queryのコンストラクタの引数で取得する情報を絞り込む方法についてみていきましょう。

まずはカスタムフィールドで絞り込む方法です。

<?php
// 条件の設定
$args = Array(
    'post_type' => 'post',      // 投稿
    'post_status' => 'publish', // 公開された投稿、または固定ページを表示(デフォルト)
    'posts_per_page' => 10,     // 表示する投稿数(-1を指定すると全投稿を表示)
    'meta_key' => 'key',        // カスタムフィールドのキーを指定
    'meta_value' => 'value',    // カスタムフィールドの値を指定
    'orderby' => 'meta_value',  // ソートする基準となる項目を指定
    'order' => 'DESC'           // ソートの並び順を指定'DESC' 降順、'ASC' 昇順
);

// クエリの定義
$wp_query = new WP_Query( $args );

// ループ
if ( $wp_query->have_posts() ) {
    while ( $wp_query->have_posts() ) {
        $wp_query->the_post();
        // 処理を記述
    }
}

// 投稿データのリセット
wp_reset_postdata();

?>

カスタムタクソノミーの投稿を絞り込み

カスタムタクソノミーの投稿を絞り込む方法についてもみていきましょう。

<?php
// 条件の設定
$args = Array(
    'post_type' => 'post',                       // 投稿を指定
    'tax_query' => array(
        array(
            'taxonomy' => 'color',               // タクソノミーを指定
            'field' => 'slug',                   // term_id(デフォルト),name,slug のいずれかを指定
            'terms' => array( 'red', 'blue' ),   // ターム(文字列かIDを指定)
            'include_children' => true,          // 階層を持つタクソノミーの場合に、子孫タクソノミーを含めるかどうか
            'operator' => 'IN'                   //  ‘NOT IN’ で指定したタームを除外
        ),
    ),
);

// クエリの定義
$wp_query = new WP_Query( $args );

// ループ
if ( $wp_query->have_posts() ) {
    while ( $wp_query->have_posts() ) {
        $wp_query->the_post();
        // 処理を記述
    }
}

// 投稿データのリセット
wp_reset_postdata();

?>

よく使うコードスニペット

ここまでWP_Queryの使い方について説明してきました。

最後にWP_Queryのコンストラクタの引数の設定でよく使う内容をコードスニペットにまとめたサイトをご紹介しておきます。

https://sole-color-blog.com/blog/265/

また、WP_Queryについてこちらで詳しく解説しています。

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

まとめ

ここではWP_Queryについて説明しました。

WP_Queryクラスを使うと指定した投稿の情報をまとめて取得することができます。

条件を絞って取得することもできます。

使いこなすことができるように、この記事を何度も参考にして下さいね!

この記事を書いた人

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
info@sss-lab.com

目次