WordPress 条件を指定して記事一覧を絞り込んで表示する

WP_Queryget_postsのパラメーターで条件を指定して記事一覧を絞り込んで表示する方法を紹介します。

投稿で絞り込む

投稿IDで絞り込む

<?php
$args = array(
    'p' => 1
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数の投稿IDで絞り込む

<?php
$args = array(
    'post__in' => array(1,5)
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

投稿スラッグで絞り込む

<?php
$args = array(
    'name' => 'hello-world'
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数の投稿スラッグで絞り込む

<?php
$args = array(
    'post_name__in' => array('hello-world', 'post-name') //WordPress4.4から
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

カテゴリーで絞り込む

カテゴリーIDで絞り込む

<?php
$args = array(
    'cat' => 29,
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数のカテゴリーIDで絞り込む

<?php
$args = array(
    'cat' => '42,44'
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

カテゴリースラッグで絞り込む

<?php
$args = array(
    'category_name' => 'ramen'
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数のカテゴリースラッグで絞り込む

<?php
$args = array(
    'category_name' => 'ramen,tsukemen'
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

カテゴリーIDで絞り込む(子カテゴリー除外)

<?php
$args = array(
    'category__in' => 44
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数のカテゴリーIDで絞り込む(子カテゴリー除外)

<?php
$args = array(
    'category__in' => array(44, 42)
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

カスタム投稿タイプで絞り込む

カスタム投稿タイプで絞り込む

<?php
$args = array(
    'post_type' => 'ramen-post'
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

複数のカスタム投稿タイプで絞り込む

<?php
$args = array(
    'post_type' => array('post', 'page', 'ramen-post')
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

タクソノミー、タームで絞り込む

タームで絞り込む

<?php
$args = array(
    'post_type' => 'somen-post',
    'tax_query' => array(
        array(
            'taxonomy' => 'somen_tax',
            'field'    => 'slug', //term_id、name、slug、term_taxonomy_idで指定可
            'terms'    => 'hosomen'
        ),
    ),
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
</ul>

日付で絞り込む

<?php
$args = array(
    'post_type' => 'event_post',
    'tax_query' => array(
        array(
            'key'     => 'customfield_key',   //絞り込むカスタムフィールドのキーを指定
            'value'   => '2022/02/02',   //絞り込む値を指定
            'compare' => '=',   //絞り込む条件を指定。「=」一致した場合。
            'type'    => 'DATE'   //絞り込む値のデータ型
        ),
    ),
    'orderby'  => 'meta_value',   //カスタムフィールドで並び替え
    'order'    => 'ASC',   //ASC:昇順 DESC:降順
    'meta_key' => 'event_start_date',   //並び替え基準になるカスタムフィールドを指定
);
$the_query = new WP_Query( $args );
?>

<ul>
<?php if ($the_query->have_posts()): ?>
    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>
    <?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>

使用できる演算子

演算子 意味
= 等しい
!= 等しくない
> より多い
>= 以上
< より少ない
<= 以下
LIKE 含む
NOT LIKE 含まない
IN 配列のいずれかを含む
NOT IN 配列のいずれかを含まない
BETWEEN 範囲内
NOT BETWEEN 範囲外

※配列を指定できるのは compare が ‘IN’, ‘NOT IN’, ‘BETWEEN’ または ‘NOT BETWEEN’ の場合
※’type’ を DATE、’compare’ を BETWEEN にして正しく比較できるのは、日付が YYYY-MM-DD 形式で保存されていて同じ形式の日付と比較する場合のみ

使用できるデータ型

データ型 意味
CHAR 文字
BINARY バイナリー
DATE 日付
DATETIME 日時
TIME 時刻
NUMERIC 整数(符号あり)
SIGNED 整数(符号あり)
UNSIGNED 整数(符号なし)
DECIMAL 浮動小数点数
DECIMAL(最大桁数,小数点以下桁数)
例: DECIMAL(10,5)

参考)関数リファレンス/WP Query

Wordpress デザイナーの私的メモ帳

設計編

基本

投稿関連

固定ページ関連

カテゴリー関連

タクソノミー、ターム関連

テンプレート作成

Advance Custom Fieldの使い方

プラグイン

その他

MW WP Form

Contact Form 7

事例

  • このエントリーをはてなブックマークに追加

プロフィール

kura

個人開発歴5年以上。サイト開発・運営。 ペアでエンジニアとアプリ開発しています。

このサイトではWEBデザイン初心者向けになるべく分かりやすいように解説したり、WEBデザインの便利ツール紹介、開発したりしています。

note