WP_Queryやget_postsのパラメータまとめ
Webサイトで商品情報や、お客様の声、FAQなどフォーマットがある程度決まっているようなページを制作する際には、Wordpressのカスタム投稿を使い、データをDBに格納し、様々な検索やソート条件でデータを取り出し、掲載情報を表示する事が多々あると思います。
DBからデータを取り出す際には、SQL文を使って取り出す事ももちろんできるのですが、Wordpressの場合には、get_postsやWP_Queryのパラメータに、検索条件を渡す事で、より簡単に取り出す事ができます。
また、SQL文の場合ですと、非常に長い文になりわかりずらくなってしまいますが、WP_Queryやget_postsに渡すパラメータですと、視認性が良く、こちらの方がわかりやすいかなとも思います。
(一方で、SQL文は、Wordpress以外の環境でも利用できるものなので、いろんな環境で流用できるコードではあります。)
但し、視認性は良いのですが、パラメータの項目を忘れてしまうと、なんだっけ?と毎回なってしまうので、今回、パラメータ項目をコードスニペットとしてまとめました。
WP_Queryのコードスニペット
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | <?php $args = array( //「author」(著者)に関連付けて検索 'author' => '1,2,3', // 著者のユーザIDを指定 'author_name' => 'rishuntrading', // user_nicenameを指定(ログイン名(user_login)では無いです) 'author__in' => array( 2 , 6 ), // 著者のユーザIDを配列で指定(該当のユーザーIDが含む記事で検索) 'author__not_in' => array( 2 , 6 ), // 著者のユーザIDを配列で指定(該当のユーザーIDを含まない記事で検索) //「category」(カテゴリ)に関連付けて検索 'cat' => 3, // カテゴリIDを指定 'category_name' => 'topics, news', // カテゴリのスラッグで指定(複数は","(カンマ)区切り) 'category__and' => array( 2 , 5 ), // カテゴリIDを指定(配列)(該当のカテゴリIDが含む記事で検索) 'category__in' => array( 2 , 5 ), // カテゴリIDを指定(配列)(該当のカテゴリIDが含む記事で検索) 'category__not_in' => array( 2 , 6 ), // カテゴリIDを指定(配列)(該当のカテゴリIDを含まない記事で検索) //「tag」(タグ)に関連付けて検索 'tag' => 'web_design', // タグのスラッグを指定 'tag_id' => 5, // タグIDを指定 'tag__and' => array( 2 , 6 ), // タグIDを指定(配列)(該当のタグIDが含む記事で検索) 'tag__in' => array( 2 , 6 ), // タグIDを指定(配列)(該当のタグIDが含む記事で検索) 'tag__not_in' => array( 2 , 6 ), // タグIDを指定(配列)(該当のタグIDが含まない記事で検索) 'tag_slug__and' => array( 'web_design', 'import' ), // タグスラッグを指定(配列)(タグスラッグを含む記事を検索) 'tag_slug__in' => array( 'web_design', 'import' ), // タグスラッグを指定(配列)(タグスラッグを含む記事を検索) //「taxonomy」(タクソノミー)に関連付けて検索(複数のタクソノミー条件は'AND'や'OR'を付与できる) 'tax_query' => array( // タクソノミー条件はtax_queryを指定 'relation' => 'AND', // タクソノミーの検索条件に 'AND' か 'OR'指定 array( 'taxonomy' => 'prefecture', // タクソノミーを指定 'field' => 'slug', // term_id(デフォルト), name, slug のいずれかの検索対象のタームのフィールド 'terms' => array( 'saitama', 'tokyo' ), // fieldに指定した検索対象フィールドの検索値(配列) 'include_children' => true, // 子孫タクソノミーを含めるかどうか 'operator' => 'IN' // 演算子'IN','NOT IN','AND','EXISTS'(4.1.0以降),'NOT EXISTS'(4.1.0以降)が利用可能 ), array( 'taxonomy' => 'contry', 'field' => 'id', 'terms' => array( 122, 132, 141 ), 'include_children' => false, 'operator' => 'NOT IN' ) ), //「投稿&固定ページ」に関連付けて検索 'p' => 10, // 投稿IDを指定 'name' => 'wordpress_tech', // 投稿スラッグを指定 'page_id' => 10, // 固定ページのIDを指定 'pagename' => 'aboutus', // ページスラッグを指定 'pagename' => 'business/website_design', // 子ページを表示する場合、スラッシュ区切りで親と子のスラッグを指定 'post_parent' => 10, // 指定したページIDの子ページを検索 'post_parent__in' => array( 10, 11, 12 ), // 親ページIDを含む投稿を検索(配列) 'post_parent__not_in' => array( 10, 11, 12 ), // 親ページIDを含まない投稿を検索(配列) 'post__in' => array( 10, 11, 12 ), // 該当の投稿IDの投稿で検索(配列) 'post__not_in' => array( 10, 11, 12 ), // 該当の投稿IDが含まない投稿で検索(配列) //「パスワード」に関連付けて検索 'has_password' => true, // パスワード付きの投稿を検索( true or false ) 'post_password' => 'birthday1111', // 該当のパスワードが付いた投稿を検索 //「post_type」に関連付けて検索 'post_type' => array( 'post', // 投稿 'page', // 固定ページ 'revision', // リビジョン 'attachment', // 添付ファイル 'custom-post-type' // カスタム投稿タイプ ), 'post_type' => 'any', // 全てのpost_typeを表示(revisionと'exclude_from_search'がtrueにセットされたものは除く) //「post_status」(投稿の状態)に関連付けて検索 'post_status' => array( // 投稿の状態を指定(デフォルト'publish') 'publish', // 公開状態 'pending', // レビュー待ち状態 'draft', // 下書き状態 'auto-draft' // コンテンツのない、新しく作成された投稿/ページを表示 'future', // 予約公開が設定された状態 'private', // ログインしたユーザーしか見れない状態 'inherit', // リビジョン 'trash', // ゴミ箱に入っている状態 ), 'post_status' => 'any', // すべての状態(post_statusで'exclude_from_search'がtrueにセットされたものは除く) //「page送り(pagination)」に関連する指定 'posts_per_page' => 10, // 1ページに表示できる最大投稿数(-1は全て表示) 'posts_per_archive_page' => 10, // 1ページに表示できる最大投稿数(アーカイブページのみ) 'nopaging' => false, // ページ送りの有効/無効、(デフォルトはfalseでページ送りを使用) 'paged' => 3, // ページ番号3の記事一覧を表示 'paged' => get_query_var('paged'), // 現在のページから投稿を表示 'offset' => 4, // 設定した数だけ、ずらして表示(例では5番目の投稿から表示) 'ignore_sticky_posts' => false, // 先頭の固定表示投稿を無視するかどうか(デフォルトは0で、先頭の固定表示投稿は無視しない) // ソートの指定 'order' => 'DESC', // 'ASC' 昇順 (1, 2, 3; a, b, c) // 'DESC' 降順 (3, 2, 1; c, b, a) 'orderby' => 'date', // デフォルト値'date' 複数オプションの指定が可能 // 例:'orderby' => 'product_name title' // その他のオプション ↓ //'none' 並び替えなし //'ID' 投稿IDでソート //'author' 著者でソート //'title' タイトルでソート //'name' Order by post name(post slug) //'modified' 更新日でソート //'parent' 親ページIDでソート //'rand' ランダム順 //'comment_count' コメント数でソート //'menu_order' ページの表示順でソート //'meta_value' アルファベット順でソート(数値ではうまくいかない) //'meta_value_num' 数値でソート //'post__in' post__inで配列で指定された投稿IDの並び順を維持して表示 //「日付や時間の期間」に関連付けて検索 'year' => 2021, // 年を指定(2021など) 'monthnum' => 4, // 月を指定(1~12) 'w' => 25, // 年内の週を指定(0~53) 'day' => 17, // 月内の日を指定(1~31) 'hour' => 13, // 時間を指定(0~23) 'minute' => 19, // 分を指定(0~60) 'second' => 30, // 秒を指定(0~60) 'm' => 201508, // 年と月を指定(201508など) //「日付の範囲指定」で投稿を検索 'date_query' => array( array( 'year' => 2021, // 年を指定(2021など) 'month' => 8, // 月を指定(1~12) 'week' => 31, // 年内の週を指定(0~53) 'day' => 5, // 月内の日を指定(1~31) 'hour' => 2, // 時間を指定(0~23) 'minute' => 3, // 分を指定(0~60) 'second' => 36, // 秒を指定(0~60) 'after' => 'February 1st, 2020',// 指定した日付以降で投稿を取得。'after'=>'2020/02/01'も可能(strtotimeと同じ) 'before' => array( // 指定した日付以前の投稿を取得。'before'=>'2020/02/01'も可能(strtotimeと同じ) 'year' => 2013, // 年を指定(2013など) デフォルトは空 'month' => 2, // 年内の月を指定(1~12) デフォルトは12 'day' => 28, // 月内の日を指定(1~31) デフォルトは月内の末日 ), 'inclusive' => true, // 「after」or「before」で指定された値を含むかどうか 'compare' => '=', // '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' , and 'NOT EXISTS' 'column' => 'post_date', // 照会するカラムを指定。デフォルトは「post_date」 'relation' => 'AND', // OR または AND デフォルトは「AND」 ), ), //「カスタムフィールド」に関連付けて投稿を検索 'meta_key' => 'key', // カスタムフィールドのキーを指定 'meta_value' => 'value', // カスタムフィールドの値を指定(文字列) 'meta_value_num' => 10, // カスタムフィールドの値を指定(数字) 'meta_compare' => '=', //「meta_value」をテストする演算子。使える値は'!='、'>'、'>='、'<'、'=' デフォルト値は'=' 'meta_query' => array( // カスタムフィールドのパラメーター 'relation' => 'AND', // 「AND」または「OR」を指定。meta_query内の配列が「2つ以上」の場合に限る。meta_query配列が1つの場合は使用しない。 array( 'key' => 'country', // カスタムフィールドのキー。 'value' => 'japan', // カスタムフィールドの値 (注意 compareの値が'IN'、'NOT IN'、'BETWEEN'、'NOT BETWEEN'のみ配列をサポート) 'type' => 'CHAR', // カスタムフィールドの型。データ型については本ブログ下部の「meta_queryで使えるデータ型」を参照 'compare' => '=', // 演算子の指定 デフォルト値は'=' 演算子の種類については以下「meta_queryで指定できる演算子の種類」を参照 ), array( 'key' => 'stock', 'value' => array( 1,20 ), 'compare' => 'NOT LIKE', ) ), //権限を持っているユーザーの記事を検索 'perm' => 'readable', // 使える値は’readable’と’editable’ //キャッシュ系パラメーター 'cache_results' => true, // 投稿情報のキャッシュの使用有無(デフォルトはtrue) 'update_post_term_cache' => true, // 投稿タームのキャッシュ更新の使用有無(デフォルトはtrue) 'update_post_meta_cache' => true, // 投稿メタのキャッシュ更新の使用有無(デフォルトはtrue) 'no_found_rows' => false, // falseの時、行数をカウント処理が挿入される(詳細は下部に記載)。(デフォルトはfalse。)。 //検索系のパラメーター 's' => $s, // 検索からクエリーストリング値を渡します。 'exact' => true, //タイトル/投稿の全体から正確なキーワードで検索するか デフォルト値はfalse 'sentence' => true, //語句(フレーズ検索)で検索するか デフォルト値はfalse // ↓ 投稿フィールドパラメーター 'fields' => 'ids' //1つのフィールドで返すか全てのフィールドで返すか デフォルトでは全てのフィールドが返される // 使用できる値↓ // 'ids' 投稿のIDの配列を返します // 'id=>parent' 連想配列を返します ); $query = new WP_Query( $args ); if(have_posts()): //データ有り while ( have_posts() ) : the_post(); //表示処理 endwhile; endif; // 投稿データのリセット wp_reset_postdata(); ?> |
meta_queryで使えるデータ型
データ型 | 説明 |
---|---|
CHAR | 文字型 |
NUMERIC | ‘SIGNED’の別名 |
DECIMAL | 浮動小数点数の型 |
SIGNED | 整数型(符号あり) |
UNSIGNED | 整数型(符号なし) |
DATE | 日付型 |
DATETIME | 日時型 |
TIME | 時刻型 |
BINARY | バイナリー型 |
meta_queryで指定できる演算子
比較演算子 | 説明 |
---|---|
= | 値が一致 |
!= | 値が一致しない |
> | 値(演算子の左)が比較値(演算子の右)より大きい |
>= | 値(演算子の左)が比較値(演算子の右)以上 |
< | 値(演算子の左)が比較値(演算子の右)より小さい |
<= | 値(演算子の左)が比較値(演算子の右)以下 |
LIKE | 値(演算子の左)が比較文字列(演算子の右)に一致 |
NOT LIKE | 値(演算子の左)が比較文字列(演算子の右)に一致しない |
IN | 値(配列)で指定した何れかに一致 |
NOT IN | 値(配列)で指定した何れかにも一致しない |
BETWEEN | 2つの値で指定した範囲内(境界を含む)である |
NOT BETWEEN | 2つの値で指定した範囲外である |
no_found_rows(キャッシュ系パラメータ)について(補足)
このパラメータは、デフォルト値(false)において、実行するSQL文のクエリに”SQL_CALC_FOUND_ROWS“オプションを付与します。
この”SQL_CALC_FOUND_ROWS“が付与されると、当該検索のためのSELECT文を実行した後、全行数を取得するためにSQL文(SELECT FOUND_ROWS)が実行されます。
本処理は、Wordpress内で、ページング処理を行うために実行されているもので、ページング処理が必要の無い条件下においては、trueにする事でパフォーマンスの向上が見込めます。(SELECT文が1回になるので当然ですが。)
WEB DESIGN全てお任せ!ホームページ制作
RishunTradingでは、日本にはないコンセプトや高いデザイン性をもったヨーロッパ製品の輸入販売、及び、Webサイト制作事業などをおこなっております。
「全てお任せ!ホームページ制作」は、ドメイン取得からサーバー設定、レスポンシブルデザイン(スマホ、タブレット対応)、SEO対策がすべて含まれたお得なホームページを制作するサービス商品です。
運用開始後に「Webサイト運用管理サービス(保守)」と組み合わせて購入しますと、メンテナンス、更新も含めてすべて弊社で実施しますので、お客様は安心して本業に集中する事ができます。
しかもなんと、「全てお任せ!ホームページ制作」は、¥100,000!で提供しております。
本業が忙しい中小企業様に大変ご好評を頂いている商品です。
独自ドメイン取得
サーバー開設&設定
レイアウト設計
レスポンシブルデザイン
(*1)検索エンジン最適化
(SEO対策)場所Maps
お問い合わせフォーム
SSL化
各種SNS連携
運用マニュアル