WordPress

WP_Queryを使って絞り込み検索するのにコレは便利!

めっちゃ参考になるページを見つけた。
絞り込みをするたびに色々ググっていたが、これがあればほとんどのことが解決できそうな気がする。
参考: これは便利!WordPressのWP_Queryでよく使うコードスニペット | それからデザイン スタッフブログ
下記、参考ページから、ほぼまるっと抜粋。

<?php
$args = array(

	// 特定の「著者」に関連付けられた投稿を表示する場合
	'author' => '1,2,3', // 著者IDを指定
	'author_name' => 'solecolor', // user_nicenameを指定(名前ではありません)
	'author__in' => array(2, 6), // 著者IDを配列で指定(著者IDを含む記事を絞り込む)
	'author__not_in' => array(2, 6), // 著者IDを配列で指定(著者IDを含まない記事を絞り込む)
	
	// 特定の「カテゴリー」に関連付けられた投稿を表示する場合
	'cat' => 5, // カテゴリーIDを指定
	'category_name' => 'daily, news', // カテゴリースラッグを指定(複数の場合は「,」で区切る)
	'category__and' => array(2, 6), // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
	'category__in' => array(2, 6), // カテゴリーIDを配列で指定(カテゴリーIDを含む記事を絞り込む)
	'category__not_in' => array(2, 6), // カテゴリーIDを配列で指定(カテゴリーIDを含まない記事を絞り込む)
	
	// 特定の「タグ」に関連付けられた投稿を表示する場合
	'tag' => 'cooking', // タグスラッグを指定
	'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('red', 'blue'), // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)
	'tag_slug__in' => array('red', 'blue'), // タグスラッグを配列で指定(タグスラッグを含む記事を絞り込む)
	
	// 特定の「タクソノミー」に関連付けられた投稿を表示する場合(以下は複数のタクソノミーにてAND検索)
	'tax_query' => array( //タクソノミーパラメーターを指定
		'relation' => 'AND', // タクソノミーの検索条件に 'AND' か 'OR' が使用可能
		array(
			'taxonomy' => 'color', // タクソノミーを指定
			'field' => 'slug', // term_id(デフォルト),name,slug のいずれかのタームの種類を選択
			'terms' => array('red', 'blue'), // ターム(文字列かIDを指定)
			'include_children' => true, // 階層を持つタクソノミーの場合に、子孫タクソノミーを含めるかどうか
			'operator' => 'IN' // 演算子'IN','NOT IN','AND','EXISTS'(4.1.0以降),'NOT EXISTS'(4.1.0以降)が利用可能
		),
		array(
			'taxonomy' => 'actor',
			'field' => 'id',
			'terms' => array(103, 115, 206),
			'include_children' => false,
			'operator' => 'NOT IN'
		)
	),
	
	// 特定の「投稿&固定ページ」に関連付けられた投稿を表示する場合
	'p' => 1, // 投稿IDを指定
	'name' => 'hello-world', // 投稿スラッグを指定
	'page_id' => 1, // 固定ページのIDを指定
	'pagename' => 'sample-page', // ページスラッグを指定
	'pagename' => 'contact_us/canada', // 子ページを表示する場合、スラッシュ区切りで親と子のスラッグを指定
	'post_parent' => 1, // ページIDを指定した子ページを表示
	'post_parent__in' => array(1, 2, 3), // 配列の親ページIDを含む投稿を表示
	'post_parent__not_in' => array(1, 2, 3), // 配列の親ページIDを含まない投稿を表示
	'post__in' => array(1, 2, 3), // 配列の投稿IDを含む投稿を表示
	'post__not_in' => array(1, 2, 3), // 配列の投稿IDを含まない投稿を表示
	
	// 特定の「パスワード」に関連付けられた投稿を表示する場合
	'has_password' => true, // パスワード付きの投稿を表示(true or false)
	'post_password' => 'zxcvbn', // 特定のパスワードが付いた投稿を表示
	
	// 特定の「タイプ」に関連付けられた投稿を表示する場合(一つの場合)
	'post_type' => 'post', // 投稿
	'post_type' => 'page', // 固定ページ
	'post_type' => 'revision', // リビジョン
	'post_type' => 'attachment', // 添付ファイル
	'post_type' => 'custom-post-type', // カスタム投稿タイプ or カスタム投稿名	

	// 特定の「タイプ」に関連付けられた投稿を表示する場合(複数の場合)
	'post_type' => array(
		'post', // 投稿
		'page', // 固定ページ
		'revision', // リビジョン
		'attachment', // 添付ファイル
		'custom-post-type' // カスタム投稿タイプ or カスタム投稿名
	),

	'post_type' => 'any', // すべてのタイプを含めて表示(リビジョンと'exclude_from_search'がtrueにセットされたものを除く)
	
	// 特定の「投稿ステータス」に関連付けられた投稿を表示する場合
	'post_status' => array( //投稿ステータスを指定 (デフォルト'publish')
		'publish', // 公開された投稿、または固定ページを表示
		'pending', // レビュー待ちの投稿を表示
		'draft', // 下書きの投稿を表示
		'auto-draft' // コンテンツのない、新しく作成された投稿を表示
		'future', // 予約公開設定された投稿を表示
		'private', // ログインしていないユーザーには見えない投稿を表示
		'inherit', // リビジョンを表示
		'trash', // ゴミ箱に入った投稿を表示
	),
	'post_status' => 'any', // すべてのステータスを表示(投稿タイプで'exclude_from_search'がtrueにセットされたものを除く)
	
	// ページ送りパラメーターを設定する場合
	'posts_per_page' => 10, // 1ページあたりに表示する投稿数を指定(-1を指定するとすべての投稿を表示)
	'posts_per_archive_page' => 10, // 1ページあたりに表示する投稿数(アーカイブページのみ)
	'nopaging' => false, // ページ送りを使用するか、すべての投稿を表示するか、(デフォルトはfalseでページ送りを使用)
	'paged' => 6, // ページ番号6の記事を表示
	'paged' => get_query_var('paged'), // 現在のページから投稿を表示
	'offset' => 3, // 設定した数だけ、ずらして表示(例では4番目の投稿から表示)
	'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' => 'menu_order 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' => 2015, // 4桁の年を数字で指定(2015など)
	'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' => 201404, // 年と月を数字で指定 (201508など)
	
	// 「○年○月○日から○年○月○日の範囲の投稿情報」を表示する場合(投稿日の検索が自由自在!)
	'date_query' => array(
		array(
			'year' => 2015, // 4桁の年を数字で指定(2015など)
			'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' => 'January 1st, 2013', // 指定した日付以降の投稿を取得。strtotime()と互換性のある文字列で'after'=>'2015/08/31'などでもOK
			'before' => array( //指定した日付以前の投稿を取得。strtotime()と互換性のある文字列で'before'=>'2015/08/31'などでもOK
			'year' => 2013, // 4桁の年を数字で指定(2015など) デフォルトは空
			'month' => 2, // 年内の月を数字で指定(1~12) デフォルトは12
			'day' => 28, // 月内の日を数字で指定(1~31) デフォルトは月内の末日
		),
		'inclusive' => true, //「after」または「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' => 'color', // カスタムフィールドのキー。
			'value' => 'blue', // カスタムフィールドの値 (注意 compareの値が'IN'、'NOT IN'、'BETWEEN'、'NOT BETWEEN'のみ配列をサポート)
			'type' => 'CHAR', // カスタムフィールドタイプ。タイプについては以下の「meta_queryで使えるデータ型」参照
			'compare' => '=', // 演算子を指定 デフォルト値は'=' 演算子の種類については以下「meta_queryで指定できる演算子の種類」参照
		),
		array(
			'key' => 'price',
			'value' => array(1,200),
			'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, // カウントをスキップする? tureでパフォーマンスが向上する可能性があるかも デフォルトはfalse
	
	// 検索系のパラメーター
	's' => $s, // 検索からクエリーストリング値を渡します。
	'exact' => true, //タイトル/投稿の全体から正確なキーワードで検索するか デフォルト値はfalse
	'sentence' => true, //語句(フレーズ検索)で検索するか デフォルト値はfalse
	
	// 投稿フィールドパラメーター
	'fields' => 'ids'  //1つのフィールドで返すか全てのフィールドで返すか デフォルトでは全てのフィールドが返される
	
	// 使用できる値
	// 'ids' 投稿のIDの配列を返します
	// 'id=>parent' 連想配列を返します
);

$the_query = new WP_Query($args);
if ($the_query->have_posts()):
while ($the_query->have_posts()): $the_query->the_post();

// 何かしらの処理
endwhile;
endif;

// 投稿データのリセット
wp_reset_query();
?>

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つの値で指定した範囲外の場合

最近の記事

SONYからVlogに特化したカメラ登場 VLOGCAM ZV-1

(キャプチャは公式サイトから勝手に拝借) あまりカメラに詳しくないけど、スマホ並みの簡単な操作でクオリティの高い動画を撮影したい。 2020年5月・・・

カメラネタ

2019年夏から2020年GWまで

2018年は体調を崩し2度の入院生活を余儀なくされ、2019年は自宅療養しつつ、小規模な案件を無理ない範囲で案件をいただきながらの生活をしていた。結果として2・・・

徒然なままに

PayPalの決済ボタンを設置してみた

ぼくが作ろうとしたのは「コインを購入してもらって、そのコインをコンテンツ内で利用してもらう」というもの。 PayPalの決済ボタンを設置するには、大きく・・・

お仕事・制作日記

カウントアップ、カウントダウンするJavaScript

ポイントを使ったり、増やしたりしたときに、結果のポイント数に差し替えるのではなくて、カウントアップしたり、カウントダウンして動的に動かそうと思って作ってみた。・・・

JavaScript

指定したドメインからのリファラーか判別する

そんなに利用頻度はないものの、たまに使う際に毎回調べてるので、備忘録がてらメモ。ドメインとかホストとかは、同義語として取り扱います(厳密な違い、FQDNについ・・・

php

booleanを返却する、便利なWP関数

booleanを返却する、便利なWP関数を備忘録がてらまとめようと思ったら、すでにWikiにまとめらてました。これは便利。条件分岐タグ - WordPress・・・

WordPress

たびのとリニューアルしました!

リニューアルを思い立ったのが、2020年4月13日。そこから開始して4月22日に完了し公開。その後微調整を加えつつ、今に至ります。 リニューアル後のたび・・・

お仕事・制作日記

カスタム投稿のタクソノミーの一覧や選択した値を取得する → get_the_terms(), get_terms()

たとえば、タクソノミースラッグを「genre」、複数形のラベルと単数形のラベルを「ジャンル」として、ジャンル候補として、下記を作った場合。 ・・・

WordPress

カスタム投稿タイプの投稿ページで投稿タイプのスラッグ/ラベルを取得する → get_post_type()

たとえば、投稿タイプスラッグを「movie」、ラベルを「映画」としたとき、投稿ページ(single-movie.php) の中で、それぞれの値を取得する方法。・・・

WordPress

【5/14発売】タムロンのF/2.8通しの望遠70-180mmフルサイズレンズ、Model A056

2020年4月7日、35mmフルサイズミラーレス一眼カメラ対応のソニーEマウント用大口径望遠ズームレンズ、「70-180mm F/2.8 Di III VXD・・・

レンズネタ

人気の記事

iframeの高さを自動調整する

iframeで呼び出した際、iframe自体はスクロールさせずに高さを取得してiframe全体を表示させます。 サンプル:iframeの高さを自動調整するデモ・・・

JavaScript

背景画像の拡大・縮小 → background-size !

W3Cで「モジュール背景とボーダー」について2011年2月15日付けで更新されてますね。 CSS3では、背景画像の幅・高さを拡大・縮小するプロパティが追加され・・・

CSS

overflowをautoにした要素のスクロール位置を変更する → scrollTop scrollLeft

まずはサンプル。 これは、overflowをautoにした要素のスクロール位置を変更するサンプルです。 これは、overflowをautoにした要素のスクロ・・・

JavaScript

WP_Queryを使って絞り込み検索するのにコレは便利!

めっちゃ参考になるページを見つけた。 絞り込みをするたびに色々ググっていたが、これがあればほとんどのことが解決できそうな気がする。 参考: これは便利!Word・・・

WordPress

WordPressのカテゴリー一覧ページでカテゴリー名とスラッグを取得する → get_queried_object()

やりたいこと カテゴリー一覧ページで、そのカテゴリー一覧ページに属する記事一覧を取得するためにループさせるのとは別に、タイトルやカテゴリー別にデザインを変・・・

WordPress

Advanced Custom Fields を使った条件分岐(セレクトボックス、チェックボックス、ラジオボタン、真偽)のテンプレート記述方法

前回、「入力フォームを自由にカスタマイズできる「Advanced Custom Fields」」で基本的なフィールド名を出力方法を紹介したが、今度は条件分岐に関・・・

WordPress

[連想配列]2つ以上のキーで並び替えをする

2つ以上のキーで連想配列を並び替えしたいときの備忘録。 サンプル配列 var arr = []; arr.push(["5", "4", "たちつて・・・

JavaScript

管理画面のカスタム投稿一覧で並び順を変更する

WordPressの管理画面。「投稿」や「固定ページ」の一覧は、公開日順に並んでいる。ところが、カスタム投稿を追加した場合、公開順ではなく名前順に並んでいること・・・

WordPress

http://localhost:8888/ → http://localhost/

http://localhost:8888/ での参照ではなく、http://localhost/ で参照できるようにします。 MAMPの設定を変更する M・・・

MAMP

アーカイブページでカスタムフィールドやタクソノミーで絞り込みした状態でリスト表示する

<?php $args = array( 'paged' => 1, 'posts_per_page' => 20, 'post・・・

WordPress

WEB制作アプリケーションWordPressWP_Queryを使って絞り込み検索するのにコレは便利! | シンプルシンプルデザイン