Manul Tech

WordPressにオリジナルのパラメータを渡すのにGETでもいいんだけど、整えたほうが見た目も綺麗だよねってことで、チャレンジ。


実は結構簡単

あまり情報がなかったりして難しそうなイメージがあったんだけど、実は簡単にできた。
やり方はいくつかあるんだろうけど、このやり方が一番簡単なんじゃないかな。

add_action('wp_loaded', 'my_rewrite_rule', 1);
function my_rewrite_rule($rules){
	add_rewrite_rule('<リライトルール>', '<リライト>', '<ポジション>');
}

これだけ。
あとは管理ページの「パーマリンク設定」内で「設定を保存」しておくこと。これでリライトルールを追加できる。(たぶん)
まだルールが追加出来できていない時は

flush_rewrite_rules();

を1回だけやって、リライトルールのキャッシュ(?)を削除してあげれば大丈夫。

具体例

例えば「ニュース」カテゴリーのレイアウトを2種類作って好きな方を選んでもらえるようにしたいとして、layoutパラメータを追加することにする。値はlist / magazineのどちらかで。

add_action('wp_loaded', 'custom_rewrite_rule', 1);
function custom_rewrite_rule($rules){
	add_rewrite_rule('news/layout/list?$', 'index.php?category_name=news&layout=list', 'top');
	add_rewrite_rule('news/layout/magazine?$', 'index.php?category_name=news&layout=magazine', 'top');
}

これだけだと <layout> の値をWordPressがわかってくれないので、わかってもらえるようにする。

add_filter('query_vars', 'custom_query_vars');
function custom_query_vars($vars){
	$vars[] = 'layout';
	return $vars;
}

これで <layout> の値をget_query_var(‘layout’)で取得できるようになる。
あとは

if($layout = get_query_var('layout')){
	include(TEMPLATEPATH."/{$layout}.php");
}

とかなんとか、どうにでも。