Wordpressにおける多言語化とURLリライトルールについて。 example.com/en/ 対応
解決したいこと
Wordpressで多言語モードを手動で実装したいです。
多言語プラグインではかゆいところに手が届かないので、子テーマfunctions.phpに記述することで自作しています。
URLルートに/en/ を付けてトップページや各コンテンツにアクセスすると英語モードでの表示にすることを目指しています。
さしあたり/en/の有無にかかわらず同一のコンテンツを出せるところまで設定したいです。
(各テンプレートでURLを拾って日本語モードか英語モードか表示を変える仕組みをのちに作る予定ですが、それについては保留でOKです。)
example.comというWordpressサイトを運営しているとします。
example.com/en
というURLにアクセスした場合、リダイレクトすることなくトップページと同一のコンテンツを表示したいです。
また、記事や固定ページなどについて
example.com/en/path/to/slug1
というURLにアクセスがあったときもまた、リダイレクトさせず
example.com/path/to/slug1
と同一のコンテンツを出したいです。
ChatGPTに聞いたところ、以下のコードを教えてくれました。
remove_action('template_redirect', 'redirect_canonical');
function custom_url_rewrite_rules() {
add_rewrite_rule('^en/?$', 'index.php', 'top');
add_rewrite_rule('^en/(.+)/?$', 'index.php?pagename=$matches[1]', 'top');
}
add_action('init', 'custom_url_rewrite_rules');
function custom_query_vars($query_vars) {
$request_uri = $_SERVER['REQUEST_URI'];
if (strpos($request_uri, '/en') === 0) {
$new_uri = str_replace('/en', '', $request_uri);
$_SERVER['REQUEST_URI'] = $new_uri;
$_SERVER['PATH_INFO'] = $new_uri;
}
return $query_vars;
}
add_filter('query_vars', 'custom_query_vars');
発生している問題・エラー
これでトップページについては同一コンテンツが表示されることに成功しているのですが、
それ以外のコンテンツについてはうまく動作せず、ページが見つからないエラー画面となります。
自分で試したこと
テーマやプラグインが干渉している可能性をChatGPTに指摘されたので、まっさらのインストール済み初期設定Wordpressサイトを作ってみてこのコードをfunctions.phpに追記してみてもダメでした。
正規表現がおかしいのか、Wordpressの仕様について私が理解していないのか、どなたか知恵を貸していただけると助かります。