WordPressクエリ

WordPressはパブリッククエリを元にSQLを作成し、該当する投稿を取得する。

パブリッククエリ確認

WP::query_varsまたはWP_Query::query_varsにパブリッククエリが格納されている。

以下でクエリを確認できる。

var_dump( $GLOBALS['wp_query']->query_vars );
array(63) { ["error"]=> string(0) "" ["m"]=> string(0) "" ["p"]=> int(0) ["post_parent"]=> string(0) "" ["subpost"]=> string(0) "" ["subpost_id"]=> string(0) "" ["attachment"]=> string(0) "" ["attachment_id"]=> int(0) ["name"]=> string(0) "" ["pagename"]=> string(0) "" ["page_id"]=> int(0) ["second"]=> string(0) "" ["minute"]=> string(0) "" ["hour"]=> string(0) "" ["day"]=> int(0) ["monthnum"]=> int(0) ["year"]=> int(0) ["w"]=> int(0) ["category_name"]=> string(0) "" ["tag"]=> string(0) "" ["cat"]=> string(0) "" ["tag_id"]=> string(0) "" ["author"]=> string(0) "" ["author_name"]=> string(0) "" ["feed"]=> string(0) "" ["tb"]=> string(0) "" ["paged"]=> int(0) ["meta_key"]=> string(0) "" ["meta_value"]=> string(0) "" ["preview"]=> string(0) "" ["s"]=> string(0) "" ["sentence"]=> string(0) "" ["title"]=> string(0) "" ["fields"]=> string(0) "" ["menu_order"]=> string(0) "" ["embed"]=> string(0) "" ["category__in"]=> array(0) { } ["category__not_in"]=> array(0) { } ["category__and"]=> array(0) { } ["post__in"]=> array(0) { } ["post__not_in"]=> array(0) { } ["post_name__in"]=> array(0) { } ["tag__in"]=> array(0) { } ["tag__not_in"]=> array(0) { } ["tag__and"]=> array(0) { } ["tag_slug__in"]=> array(0) { } ["tag_slug__and"]=> array(0) { } ["post_parent__in"]=> array(0) { } ["post_parent__not_in"]=> array(0) { } ["author__in"]=> array(0) { } ["author__not_in"]=> array(0) { } ["ignore_sticky_posts"]=> bool(false) ["suppress_filters"]=> bool(false) ["cache_results"]=> bool(true) ["update_post_term_cache"]=> bool(true) ["lazy_load_term_meta"]=> bool(true) ["update_post_meta_cache"]=> bool(true) ["post_type"]=> string(0) "" ["posts_per_page"]=> int(2) ["nopaging"]=> bool(false) ["comments_per_page"]=> string(2) "50" ["no_found_rows"]=> bool(false) ["order"]=> string(4) "DESC" }

例えばpagedはページネーション用のパブリッククエリ。

パブリッククエリ取得

コード内でパブリッククエリを取得するにはget_query_var()を使用する。

get_query_var

グローバル$wp_queryオブジェクトのWP_Queryクラス内のpublicなquery variableを取得する。

例)ページネーション用のページ番号を取得

get_query_var( 'paged' );

ここでURLとしてはhttps://example.com/page/2の「2」はパブリッククエリpageではなくpagedの値になる(WordPressの決まり)。

以下は勘違いしやすいので注意。

  • paged:ページネーション用のパブリッククエリ
  • page:一つの投稿を複数ページに分割(投稿本文で<!--nextpage-->を入力した場合)したときのページ番号

参考: https://wordpress.stackexchange.com/questions/180784/what-is-the-difference-between-paged-and-page

WP::query_vars

例えばhttp://example.com/sample-pageへアクセスした場合、WP::query_varsには以下が設定される。

Array
(
    [page]     =>
    [pagename] => sample-page
)

参考: https://wpdocs.osdn.jp/WordPress_Query_Vars

クエリ文字列($wp_query->query_varsに保存されている)にカテゴリIDの前に-記号をつけた文字列を追加することで、そのカテゴリを除外できる。

https://wpdocs.osdn.jp/%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%AF%E3%82%A8%E3%83%AA

WP_Query::query_vars

$query_vars 解析された$queryを保持する連想配列。クエリ変数と対応する値の配列。

https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query

※ $GLOBAS['wp_query']と誤記されていた箇所を、正しいグローバル変数名$GLOBALS['wp_query']に修正した。また、PHPの配列出力例がコードフェンスsqlとして記載されていたためphpに修正した。