
条件指定して記事を表示させるサブループのWP Queryパラメータ指定方法まとめ
WordPressにおいて投稿記事を表示させる時にはループを使いますが、パラメータに引数を入れることにより、いろいろな条件で絞り込んで表示することができます。今回はメインループとは別のサブループで用いるWP Queryについて、用途別にパラメータの指定方法についてまとめてみました。
基本的なサブループ(WP Query)の書き方は次の通りになります。
<?php $args = array( //変数にパラメータを指定 ); //サブループにパラメータを適用 $the_query = new WP_Query( $args ); //記事があるか無いかの判別 if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> //ループの部分(記事がある時の表示内容) <?php endwhile; ?> <?php else: ?> //記事がない時の表示内容 <?php endif; ?> //ループの終了 <?php wp_reset_postdata(); //ループの設定をリセット ?>上記コードに登場する最初の変数である$argsにパラメータを指定することで、ループの設定をすることができます。
カテゴリー・タグに関する指定
カテゴリーのパラメータ指定//カテゴリーIDで指定 'cat' => 7 //論理和:カテゴリースラッグで指定 'category_name' => 'slug001, slug002' //論理和:カテゴリーIDで指定 'category__in' => array( 3, 8 ) //論理積:カテゴリースラッグで指定 'category_name' => 'slug001+slug002' //論理積:カテゴリーIDで指定 'category__and' => array( 3, 8 ) //否定論理和:カテゴリーIDで指定 'category__not_in' => array( 3, 8 )タグのパラメータ指定
//タグスラッグで指定 'tag' => 'slug001' //タグIDで指定 'tag_id' => 7 //論理和:タグIDで指定 'tag__in' => array( 4, 8) //論理和:タグスラッグで指定 'tag_slug__in' => array( 'slug001', 'slug002') //論理積:タグIDで指定 'tag__and' => array( 4, 8) //論理積:タグスラッグで指定 'tag_slug__and' => array( 'slug001', 'slug002') //否定論理和:タグIDで指定 'tag__not_in' => array( 4, 8)
著者・日付に関する指定
著者のパラメータ指定//著者IDで指定 'author' => '2,6,9' //著者nicenameで指定 'author_name' => 'user_nicename001' //論理和:著者IDで指定 'author__in' => array( 2,6,9 ) //否定論理和:著者IDで指定 'author__not_in' => array( 2,6,9 )日付のパラメータ指定
//西暦を4桁で指定 'year' => 2016 //月を指定 'monthnum' => 12 //西暦と月を指定 'm' => 201604
カスタム分類・カスタムフィールドに関する指定
タクソノミーのパラメータ指定//単一のタクソノミーを指定
'tax_query' => array(
array(
//タクソノミー(カスタム分類)を指定
'taxonomy' => 'taxonomy100',
//先述の指定方法をスラッグに
'field' => 'slug',
//指定したタクソノミーが持つターム名
'terms' => array( 'terms101', 'terms102' ),
//子孫タクソノミーを持つ場合に含めるかどうか(初期値はtrue)
'include_children' => true,
//演算子の指定(初期値はIN、'IN' 'NOT IN' 'AND'が使用可能)
'operator' => 'IN'
)
)
//複数のタクソノミーを指定
'tax_query' => array(
//複数のタクソノミーを扱う場合の指定(AND、OR)
'relation' => 'AND',
array(
'taxonomy' => 'taxonomy100',
'field' => 'slug',
'terms' => array( 'terms101', 'terms102' ),
'include_children' => true,
'operator' => 'IN'
),
//カンマでつなげて記述する
array(
'taxonomy' => 'taxonomy200',
'field' => 'slug',
'terms' => array( 'terms203', 'terms206' ),
'include_children' => false,
'operator' => 'NOT IN'
)
)
カスタムフィールドのパラメータ指定
//カスタムフィールドのキー名で指定 'meta_key' => 'KEY_NAME' //カスタムフィールドの属性値名で指定 'meta_value' => 'VALUE_NAME' //カスタムフィールドの属性数値で指定 'meta_value_num' => 18
その他パラメータ指定
//投稿記事のIDで指定
'p' => 48
//論理和:複数の投稿記事のIDで指定
'post__in' => array( 104, 102, 100, 92, 90, 88 )
//投稿記事のスラッグで指定
'name' => 'slug-post001'
//固定ページのIDで指定
'page_id' => 5
//固定ページのスラッグで指定
'pagename' => 'slug-page001'
//投稿タイプのスラッグで指定
'post_type' => 'post'
//投稿タイプの種類で複数指定
'post_type' => array(
//通常の投稿
'post',
//固定ページ
'page',
//カスタム投稿タイプ(スラッグで指定)
'custom-post-type-slug'
)
//1ページあたりの投稿記事表示数を指定(-1で全ての記事を表示させる)
'posts_per_page' => 15
//現在のページ目次を取得(サブループでページネーションを使う場合に必要)
'paged' => get_query_var('paged')
//属性値の昇順で指定
'order' => 'ASC'
//属性値の降順で指定
'order' => 'DESC'
//日付などの条件指定で並び替える
'orderby' => 'date'
//ランダムに記事を表示
'orderby' => 'rand'
その他にもいろいろなパラメータを設定することができます。これらのパラメータを実際にサブループ内で指定すると次のようになります。
【PHP】
<?php $args = array( 'posts_per_page' => 15, 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'taxonomy-100', 'field' => 'slug', 'terms' => 'term-101' ) ) ); $the_query = new WP_Query( $args ); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?> //ループさせるコンテンツを表示 <?php endwhile; ?> <?php else: ?> <p>記事がありません</p> <?php endif; ?> <?php wp_reset_postdata(); ?>上記では、通常投稿のカスタム分類「taxonomy-100(スラッグ名)」に属する、ターム(=カテゴリーもしくはタグ)名「term-101」が関連付けられた記事をページ内に15記事分表示させます。
categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)