WordPress関数の「get_query_var」のクエリ変数キー調査記録

 

株式会社オンラインの金沢です。

 

以前にもお伝えしましたが、当ホームページはTwenty Fifteenの子テーマを作成して使用しています。

それまでもテーマの作成をしたことはありましたが、CMSが多く、カスタム投稿をベースにしたものばかりでした。そのようなサイトの投稿一覧では、パラメータを設定したWP_Queryを呼び出して表示させていました。

ところが、同じようにブログのアーカイブページを表示させようとすると、アーカイブのパラメータ取得に困ってしまいました。Twenty Fifteenのテンプレート関数やウィジェットが生成するリンク先は、すべてarchive.phpにまとめられていますので、どのようにWP_Queryを呼び出せばよいのでしょうか?

 

そこで見つけましたのが、WordPressのget_query_var関数です(関数リファレンス/get query var – WordPress Codex 日本語版 参照)。これでクエリ変数を得られるのですが、パラメータにキーを入れて呼び出さないと空の文字列が返されます。キーの一覧はWordPress Codexのクエリ変数(Query Vars)のページに掲載されていました。ただし、どのクエリ変数が使われるかは調べないとわからないようです。従って、次のような関数を使用してみました。

function check_query_var() {
	$keys = array('attachment','attachment_id','author','author_name','cat','category_name',
		'comments_popup','day','error','feed','hour','hour','m','minute','monthnum',
		'name','p','page_id','paged','pagename','post_parent','post_type','preview',
		'second','static','subpost','subpost_id','tag','tag_id','tb','w','year');
	foreach($keys as $key) {
		$query_var = get_query_var($key);
		if($query_var) {
			echo $key.': '.$query_var."\n";
		}
	}
}

これにより、クエリ変数がある場合はget_query_varの変数キーと返り値を確認することができます。これをheader.phpかfooter.phpに貼り、全ページを見回ってみた結果を表にまとめます。

変数キー 返り値
投稿 – 個別 p 投稿ID
投稿 – 作成者アーカイブ author
author_id
ユーザーID
ユーザー名
投稿 – 年別アーカイブ year 投稿した年
投稿 – 月別アーカイブ monthnum
year
投稿した月
投稿した年
投稿 – 日別アーカイブ day
monthnum
year
投稿した日
投稿した月
投稿した年
投稿 – カテゴリーアーカイブ cat
category_name
カテゴリーID
スラッグ
投稿 – タグアーカイブ tag
tag_id
タグのスラッグ
タグのID
カスタム投稿 – 個別 p
post_type
投稿ID
投稿タイプ名
カスタム投稿 – アーカイブ post_type 投稿タイプ名
固定ページ name
pagename
スラッグ?
スラッグ?
検索結果 post_type “any” (常時)
※アーカイブの2ページ目以降 paged ページ番号

固定ページのpageとpagenameの違いはわかりませんでした。検索結果が常にpost_type: anyとなることは意外でした。検索パラメータは別のところになるのでしょうか。

404ページはURLが近い形式のクエリ変数で試みているようです。例として、「http://www.online-inc.jp/あああああ」とリクエストした場合、クエリ変数は「name: あああああ, pagename: あああああ」となります。

また、パーマリンク設定によってもクエリ変数は変わるようです。当ホームページは数字ベースに設定していますが、投稿名に設定すると「p: 投稿ID」は使わずに、「name: スラッグ名」になるようです。

以上を参考に、あとは条件分岐タグ(is_authorやis_categoryなど)を使用して、各ページのクエリ変数を取得すれば一覧を作成できます。

 

ここまでやって気が付いたのですが、アーカイブではわざわざWP_Queryを呼ばなくてもthe_postを使い続けるだけで済むではないですか。

Twenty Fifteenでは

while ( have_posts() ) : the_post();

	get_template_part( 'content', get_post_format() );

endwhile;

という風にアーカイブを作成していますので、get_template_partの代わりのループ内処理を記述すれば簡単にアーカイブをカスタマイズできるようです。

 

骨折り損のような気もしましたが、今後何かに使えるかもしれませんので、忘備録として書いておきます。

金沢

著者プロフィール

金沢大樹

2年間のアルバイトを経て、平成27年度より社員として株式会社オンラインでWeb制作をしております。
WordPressを得意としており、プラグイン開発の経験もございます。
また、Monacaを使用したスマートフォンアプリ開発や、Visual BasicによるWindowsアプリケーション開発もできます。

コメントを残す

コメントは管理者による承認後に公開されます。

CAPTCHA