Lan's note

高速HUGOブログで脱WordPress!静的ブログでもココまでできるを実証中!

2019-04-04

WordPressクエリパラメータつきURLを静的URLにリライト ~ 完全版 ~

本記事の目的はWordPressでクエリ文字付き動的URLを静的URLにリライトし、クエリパラメータの値を取得することです。

WordPressの公式サイト通りに関数を追加したり、コードを書けばできますが、その他のページをさまよっていてすぐに実装できなかったのでまとめておきます。

https://kusanagi.lancers.work/food/?pref=hokkaido&city=sapporo

↑これを↓これにリライトし、クエリパラメータの値を取得します。

https://kusanagi.lancers.work/food/hokkaido/sapporo

2つの関数追加

テーマファイル内のfunctions.phpに次の2つの関数を追加します。

1.カスタムクエリ文字列変数の認識

function custom_rewrite_tag() {
    add_rewrite_tag('%pref%', '([^&]+)');
    add_rewrite_tag('%city%', '([^&]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);

ここでは**prefやcityはクエリの文字列ですよ!**とWordPressに認識させています。

クエリの文字列とは、例えば https://kusanagi.lancers.work/food/?pref=hokkaidoprefにあたります。

prefcity以外の箇所は何も考えずコピペしてください。

2.ユーザーフレンドリーなカスタムURLを作成

function custom_rewrite_rule() {
    add_rewrite_rule('^food/([^/]*)/([^/]*)/?$', 'index.php?page_id=固定ページの番号&pref=$matches[1]&city=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);

ここでは静的URLと動的URLの関連付けを行っています。

add_rewrite_rule('^food/([^/]*)/([^/]*)/?$'

今回は、クエリ文字がprefとcityの2つありますので、/([^/])/([^/])/のように記述します。

最初の()内がpref相当、次の()内がcityにあたります。クエリ文字の数だけ記述してください。

そして、クエリの値を受け取るのが、

 'index.php?page_id=固定ページの番号&pref=$matches[1]&city=$matches[2]'

の箇所になります。

$matchesは定義された名前ですので、$matchesは修正せず、パラメータの数だけ、[1]、[2]、[3]・・・と振ってあげます。 ※$matches[1]に最初のクエリパラメータの値が入りますので、0からでなく1から始めます。

パーマリンクデータベースの更新(最重要)

この作業を忘れると、どんなに関数を追加しても反映されません。

「設定」→「パーマリンク設定」で何も変更せずに「変更を保存」ボタンを押して、パーマリンクのデータベースを更新します。

クエリの値を受け取る

global $wp_query;

$pref = $wp_query->query_vars['pref'];
$city= $wp_query->query_vars['city'];

とすることでprefの値hokkaidoを取得することができます。

city=sapporoも同様に取得できます。

以上の流れで、WordPressの動的URLを静的URLに変換し、クエリパラメータの値を取得することができます。

WordPressのカスタムリライトが効かないというかたは、是非この順に沿って設定してみてください。

この記事がお役に立てるととても嬉しいです!