言語設定が「英語」のブラウザからのアクセスの時、英語ページに強制的にリダイレクトさせる

日英対応のサイトを作っていると、英語圏からのアクセスは英語ページを表示させてほしい、という要望をたまにいただきます。
今回はこの解決事例を紹介します。
方法はいろいろありそうですが、一つの方法として、ブラウザの言語設定を取得して、その最優先言語が英語(’en’)だった場合に英語ページにリダイレクトさせる方法があります。
今回は簡単そうなこの方法で対応することにします。
すでに英語ページ(下層ページ含む)にいる英語圏ユーザーをリダイレクトさせないようにしないといけないので、今いるページのURIを取得して、それが英語ページだった場合にはリダイレクトをしないようにしないといけません。
そこだけ注意すればあとは簡単です。
テーマのfunctions.phpに以下の追記します。
add_action('template_redirect', 'language_based_redirection');
function language_based_redirection() {
// 現在のURLを取得
$current_url = home_url($_SERVER['REQUEST_URI']);
// 現在のURLが英語ページまたはその下層ページであるかをチェック
$is_english_or_subpage = preg_match('#/en(/|$)#', $current_url);
// ブラウザの言語設定を確認(最優先の言語のみを使用)
$languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$primary_language = strtolower(trim(explode(';', $languages[0])[0]));
if ($primary_language === 'en' && !$is_english_or_subpage) {
// 英語が最優先言語で、英語ページまたはその下層ページでない場合のみ英語ページ(ここでは「/en」)にリダイレクト
wp_redirect(home_url('/en'));
exit;
}
}
これで、英語圏ユーザー(正確には言語設定が英語のブラウザ)からのアクセスで日本語ページを開こうとすると、英語ページにリダイレクトさせることができます。
※ リダイレクト先を間違えたりすると、リダイレクトループになってしまいますのでご注意ください。