3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アクセシビリティの知見を発信しよう!

WordPressにおける動的ルーティングの実装方法

Posted at

はじめに

WordPressで動的ルーティングを実装する方法のサンプルです。

問題

WordPressの修正案件。
地域の出し分けをカスタム投稿でやってほしいとのこと。
差分少ないし、記事を何十も作るのダルメシアンだったので、動的ルーティング使って解決。
ただLaravelやReactの感覚でいたから、予想の10倍は苦労した。

解決方法

functions.php

function custom_rewrite_rule()
{
	add_rewrite_rule(
	  '^area/([^/]*)/([^/]*)/?',
	  'index.php?pagename=city&prefecture=$matches[1]&city=$matches[2]',
	  'top'
	);
}
add_action('init', 'custom_rewrite_rule');

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

function custom_template_include($template)
{
	if (get_query_var('prefecture') && get_query_var('city')) {
		$new_template = locate_template(array('city.php'));
		if (!empty($new_template)) {
			return $new_template;
		}
	}
	return $template;
}
add_filter('template_include', 'custom_template_include');

function custom_wpseo_title($title)
{
	if (!get_query_var('area_redirect')) {
		$city = get_query_var('city');
		$title = urldecode(esc_html($city));
	}
	return $title;
}
add_filter('wpseo_title', 'custom_wpseo_title');

解説

1

WordPressの起動時に実行。
ルーティングを行うURLをURLパラメーターに変換する。

function custom_rewrite_rule(){}
add_action('init', 'custom_rewrite_rule');

2

変換したパラメーターを受け取る


function custom_query_vars($vars){}
add_filter('query_vars', 'custom_query_vars');

3

URLパラメーターを持つ時にテンプレートファイルの呼び出し。
今回はcity.phpに、地域ごとに出し分ける記述を書く。
(例えば市町村ごとの事例とかお客様の声とか)


function custom_template_include($template) {}
add_filter('template_include', 'custom_template_include');

4

titleタグの修正。
これを書かないと、404扱いになります。
filterのキーはSEOプラグインによって変わるので調べてください。


function custom_wpseo_title($title) {}
add_filter('wpseo_title', 'custom_wpseo_title');

おわりに

全体像は掴んでるけど、細かい処理までは追ってないです。
正直、なんで動くか厳密には把握してないし、あくまで参考程度にしてください。

個人的には4でドツボったので、誰かの役に立てば。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?