今回はget_query_var()関数について理解を深めていこうと思います。
get_query_var()
はページ種別やパーマリンク 構造によって取得できる情報が変化していく便利な関数です。
しかし、そのページで有効な変数キーを引数に指定しないとうまく値が取得できません。
どのページでどのキーが使えて、それにより何の情報が得られるのか。それらをまとめていこうと思います。
get_query_var()関数について
基本的な使用形式は以下の通りです。
<?php get_query_var( $var, $default ); ?>
第1引数$var
でどの情報を取得するか、変数キーを指定します。
第2引数$default
では、指定したクエリ変数が取得できなかった時の返り値をセットできます。初期値は空文字。
Codex日本語版「関数リファレンス/get query var」によると、get_query_var()
について、以下のように説明されています。
グローバル $wp_query オブジェクトの WP_Query クラス内の public query variable を取得する。
この「 public query variable」というクエリ変数は、次のように設定されているそうです。
$public_query_vars = array(
'm',
'p',
'posts',
'w',
'cat',
'withcomments',
'withoutcomments',
's',
'search',
'exact',
'sentence',
'debug',
'calendar',
'page',
'paged',
'more',
'tb',
'pb',
'author',
'order',
'orderby',
'year',
'monthnum',
'day',
'hour',
'minute',
'second',
'name',
'category_name',
'tag',
'feed',
'author_name',
'static',
'pagename',
'page_id',
'error',
'comments_popup',
'attachment',
'attachment_id',
'subpost',
'subpost_id',
'preview',
'robots',
'taxonomy',
'term',
'cpage',
'post_type'
);
めちゃくちゃ種類がありますね。笑
各ページで取得できるクエリ変数
さて、get_query_var()で取得できるクエリ変数の種類がたくさんあることは分かりましたが、実際に各ページで取得できるのはどれなのでしょうか。
実際に調べてみました。(header.phpにてvar_dump() させて調べています。)
意外だったのですが、パーマリンク構造によって同じページでも有効な変数キーが変動するということが分かりました。
てっきりページ種別ごとに有効な変数キーが決まっているものと思っていたのですが、そうではないようです。
わかった結果を表にまとめてみます。
有効な変数キー | 値 | |
---|---|---|
投稿ページ | 'p' *1
'name' *2 'year' *3 |
投稿ID
投稿スラッグ 投稿年 |
固定ページ | 'p' *1 'page_id' *1'name' *2 'pagename' *2 |
投稿ID 固定ページIDページスラッグ ページスラッグ |
カスタム投稿ページ | 'p' *1
'name' *2 'post_type' |
投稿ID
ページスラッグ 投稿タイプ |
年別アーカイブ | 'year' | 年 |
月別アーカイブ | 'year' 'monthnum' |
月 年 |
日別アーカイブ | 'year' 'monthnum' 'day' |
年 月 日 |
カテゴリーアーカイブ | 'cat' 'category_name' |
カテゴリーID カテゴリースラッグ |
タグアーカイブ | 'tag' | タグスラッグ |
タクソノミーアーカイブ | 'taxonomy' 'term' |
タクソノミー名 ターム名 |
カスタム投稿 – アーカイブ | 'post_type' | 投稿タイプ名 |
作成者アーカイブ | 'author' 'author_name' *4 |
ユーザーID ユーザー名 |
アーカイブの2ページ目以降 | 'paged' | ページ番号 |
固定ページの2ページ目以降 | 'page' | ページ番号 |
検索結果ページ | 's'
'post_type' |
検索ワード
'any'がセットされている |
*1 パーマリンク構造に ?p= や 投稿ID が入っている時のみ有効。
*2 パーマリンク構造にスラッグが入っている時のみ有効。
*3 パーマリンク構造に日付が入っている時のみ有効。
*4 パーマリンク構造に投稿者名が入っている時のみ有効。
また上記以外では、基本的に全てのページで'order'
キーには文字列'DESC'
が入っています。
query_posts()でクエリを書き換えた場合
先ほどの表にまとめたのは、標準的なメインループの状態でget_query_var()
を使用した場合の結果です。
query_posts()
でクエリ情報を書き換えた場合、その書き換えが有効な間は取得できる情報も変化します。
例 archive.phpにて
query_posts('post_type=blog');
のように投稿タイプを指定すると、日付アーカイブページなどでも'post_type'
という変数キーが有効になります。(値は文字列'blog'
)