【WordPress】WP_Queryでの記事一覧の表示の仕方
WP_Queryについて
WP_QueryはWordPressでブログの投稿やページの情報を取得するためのクラスであり、通常、メインループと呼ばれるものとは別にサブループを作成する際に使用されます。
メインループは、投稿や固定ページなどのページタイトルや本文の内容を表示するためのループです。
一方で、サブループはメインループとは独立して、例えば投稿一覧などを表示するために使用されます。
WP_Queryクラスを使用すると、特定の条件に基づいて表示する投稿を絞り込むことができます。
このクラスには、投稿が存在するかどうかを確認するための have_posts メソッドや、ループ内で次の投稿に進むための the_post メソッドなどが提供されています。
コンストラクタに引数を指定することで、取得する投稿の情報をカスタマイズすることも可能です。
WP_Queryの使用方法
Wp_Queryのよくある利用法について考察してみましょう。
まず、new キーワードを用いてWP_Queryのインスタンスを生成し、クエリを定義します。
この際、WP_Queryのコンストラクタに引数を指定することで、取得する情報を特定の条件に基づいて絞り込むことができます。
その後、have_posts メソッドを使用して表示する投稿が存在するかどうかを判断し、もし投稿が存在する場合は、該当する投稿の数だけ while ループを使用して処理を反復します。
while ループ内では、the_post メソッドを使用して次の投稿に進むようになっています。
これにより、WP_Queryを用いて柔軟で特定の条件に基づいた投稿情報を取得し、それをループを通して順次処理する一連の手順が実現されます。
<?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プロパティが備わっています。
<!--?php $args = array( 'post_type' =--> 'post' //条件を設定する ); $wp_query = new WP_Query($args); //条件を入れてサブループを作成する $get_num = $wp_query->post_count; //データの中から記事の総数を取得する $all_num = $wp_query->found_posts; //データの中から今表示する記事数を取得する echo "全" . $all_num . "件中、" . $get_num . "件を表示";//用意したデータを表示する ?>
上記の場合だと「全◯◯件中、△件を表示」といった形で出力できます。
カスタムフィールドで絞り込む
<?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(); ?>
このコラムを書いた人
Misato
AdvisorDirectorDesignerFront-end-engineer
ホームページに関するお困りごと、
ご不明点があればお気軽にお問い合わせください!