WP_Queryで投稿データを取得して表示をカスタマイズ【随時更新】

投稿データを取得

WordPressでは投稿データをWP_Queryクラスで取得することができます。
その際に、様々なパラメーターを引数に設定することで、表示する投稿データを変えることが可能です。

投稿を3件取得したり、特定のカテゴリーの投稿を取得したり、WordPressをカスタマイズする上でWP_Queryを柔軟に操作すること必要だと思っています。

ですが、できることがありすぎて情報量が多く、一度ではとても覚えきれません。
なので個人的によく使うコードを記事にして、いつでもコピペできるようにしました。

一度で全ては書ききれないので、これからも随時更新していきます。

目次

↓雛形となるコードはこちら

<?php
//$argsのパラメーターを変えていく
$args = array(
    'post_type' => 'post', //投稿タイプ
    'posts_per_page' => -1, //全ページを取得
);

$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
  while ($the_query->have_posts()) : $the_query->the_post();
    
  /* ループ内の記述 */

  endwhile;
endif;
wp_reset_postdata();
?>

こちらのコードはカスタマイズする際に見慣れているかと思います。

WP_Queryに渡すパラメーターを変えることで、投稿データのさまざまな情報を得ることができます

投稿者

投稿者に関連する投稿を取得するためのパラメータです。

投稿者に関するパラメーター

パラメーター説明
author整数投稿者ID
author_name文字列ニックネーム

投稿者ID1の投稿を取得

$args = array(
    'author' => 1, // 投稿者ID
);
$the_query = new WP_Query($args);

カテゴリー

カテゴリーに関するパラメーター

パラメーター説明
cat整数カテゴリーID
category_name文字列カテゴリースラッグ

特定のカテゴリーIDを持つ投稿を取得

$args = array(
    'cat' => 1 // カテゴリーID
);
$the_query = new WP_Query($args);

特定のスラッグのカテゴリーを持つ投稿を取得

$args = array(
    'category_name' => 'news' // カテゴリースラッグ
);
$the_query = new WP_Query($args);

タグ

タグに関するパラメーター

パラメーター説明
tag文字列タグスラッグ
tag_id整数タグID

スラッグがWordPressの投稿を取得

$args = array(
    'tag' => 'WordPress' // タグスラッグ
);
$the_query = new WP_Query($args);

タグIDが1の投稿を取得

$args = array(
    'tag_id' => 1 // タグID
);
$the_query = new WP_Query($args);

タクソノミー

申し訳ありません。後ほど執筆する予定ですm(_ _)m

キーワード検索

キーワード検索に関するパラメーター

パラメーター説明
s文字列検索キーワード

キーワードに「keyword」を含む投稿を取得

$args = array(
    's' => 'keyword' // 検索するキーワード
);
$the_query = new WP_Query($args);

投稿,ページ

投稿,ページに関するパラメーター

パラメーター説明
p整数投稿ID
name文字列投稿スラッグ
page_id整数ページID
pagename文字列ページスラッグ
post_parent整数ページIDを指定し、その子ページを取得

投稿IDが1の投稿を取得

$args = array(
    'p' => 1 // 投稿ID
);
$the_query = new WP_Query($args);

スラッグがkotei-pageのページを取得

$args = array(
    'pagename' => 'kotei-page' // ページスラッグ
);
$the_query = new WP_Query($args);

親ページIDが1の子ページを取得

$args = array(
    'post_type' => 'page',
    'post_parent' => 1
);
$the_query = new WP_Query($args);

投稿タイプ

投稿タイプに関するパラメーター

パラメーター説明
post_type文字列、配列投稿タイプを指定。デフォルトはpost

post_typeがとれるパラメーター

投稿タイプ説明
post投稿
page固定ページ
revisionリビジョン
nav_menu_itemナビゲーションメニュー項目

固定ページの投稿を取得

$args = array(
    'post_type' => 'page' // 固定ページを指定
);
$the_query = new WP_Query($args);

投稿とカスタム投稿を取得

$args = array(
    'post_type' => array(
        'page', // 固定ページを指定
        'custom' // カスタム投稿で設定した投稿タイプ
    )
);
$the_query = new WP_Query($args);

投稿ステータス

投稿ステータスに関するパラメーター

パラメーター説明
post_status文字列、配列投稿ステータスを指定する。デフォルトのは publish

post_statusがとれるパラメーター

投稿ステータス説明
publish公開された投稿
privateログインしていないユーザーには見えない投稿

公開された投稿

$args = array(
    'post_status' => 'publish' // 公開された投稿
);
$the_query = new WP_Query($args);

並び替え

並び替えに関するパラメーター

パラメーター説明
post_status文字列、配列DESC(降順)またはASC(昇順)を指定。デフォルトはDESC
orderby文字列、配列並び替えの対象を指定。デフォルトはdate

ordeybyで使えるパラメーター

パラメーター説明
noneソートを指定しない
ID投稿IDでソートする
author投稿者でソートする
titleタイトルでソートする
name投稿スラッグでソートする
type投稿タイプでソートする
date投稿日でソートする
modified最終更新日でソートする
parent親の投稿IDでソートする
randランダム順
comment_countコメント数でソートする

タイトルの降順で投稿を取得

$args = array(
    'orderby' => 'title', // タイトルでソート
    'order' => 'DESC', // 降順
);
$the_query = new WP_Query($args);

投稿日とタイトルの降順で投稿を取得

$args = array(
    'orderby' => 'date title', // 投稿日とタイトルでソート
    'order' => 'DESC', // 降順
);
$the_query = new WP_Query($args);

投稿日を降順、タイトルを昇順で投稿を取得

$args = array(
    'orderby' => array(
        'date' => 'DESC', // 投稿日を降順
        'title' => 'ASC' // タイトルを昇順
    )
);
$the_query = new WP_Query($args);

ページ送り

ページ送りに関するパラメーター

パラメーター説明
nopaging真偽値全ての投稿を取得するか、ページ送りを使用するかの選択。デフォルトはfalse
posts_per_page整数取得する投稿の件数を指定。-1を指定すると、全ての投稿を取得
offset整数オフセット値を指定。この値で指定した件数の投稿を先頭から除外して投稿を取得
paged整数ページ数
page整数固定ページをフロントページに使用している場合のページ数

3件の投稿を取得

$args = array(
    'posts_per_page' => 3 // 3件指定
);
$the_query = new WP_Query($args);

全件の投稿を取得

$args = array(
    'posts_per_page' => -1 // 全件指定
);
$the_query = new WP_Query($args);

5ページ目の投稿を取得

$args = array(
    'paged' => 5 // 5ページ目を指定
);
$the_query = new WP_Query($args);

先頭から2件ずらして、5件の投稿を取得(3〜8)

$args = array(
    'posts_per_page' => 5, // 5件指定
    'offset' => 2   //オフセット数の指定
);
$the_query = new WP_Query($args);

最後に

まだまだできることはたくさんありますが、一度に書ききれないためこれからも随時更新していきます。

この記事を書いた人

けいた

高校卒業してから15年間勤めた会社を退職→脱サラしてWeb制作。
現在はWordPressサイト構築とShopifyストア構築をメインに、副業で物販をやっています。