Manul Tech

WordPressにオリジナルのリライトルールを適用する

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");
}

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

コメント0