WordPressはパブリッククエリを元にSQLを作成して該当する投稿を取得する。
WP::query_vars
またはWP_Query::query_vars
にパブリッククエリが格納されている。
以下でクエリを確認できる。
var_dump($GLOBAS['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
を使用する。
グローバル $wp_query オブジェクトの WP_Query クラス内の public query variable /en を取得する。
例)ページネーション用のページ番号を取得
get_query_var('paged')
ここでURLとしてはhttps://example.com/page/2
の2はパブリッククエリpage
ではなくpaged
の値になる(WordPressの決まり)。
以下は勘違いしやすいので注意。
<!--nextpage-->
を入力した場合)した場合の番号https://wordpress.stackexchange.com/questions/180784/what-is-the-difference-between-paged-and-page
例えば 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
$query_vars 解析された $query を保持する連想配列。クエリ変数と対応する値の配列。