🐙

PHP(wordpress)で多言語に対応する

2022/11/29に公開

introduction

今回対応するのは、今まで多言語に対応するためにわざわざいくつかのコピーファイルを生成しているサイト。コレの致命的な弱点としては、修正をする際にめちゃくちゃ面倒なのである。そのため、まずはコピーファイルの統一を行いたい。また、今回扱うサイトはwordpress内で内容を完結させていたほうがいいかもしれない。そのため、統一+wordpress対応をできるようにすることが今回の挑戦である。

SEO的に良い方法とはなにか?

まず、コピーファイルを作らない方法としていくつか代案はある。サブドメインをつくったりサブディレクトリをつくったりなどである。それに関しては以下のurlが参考になる。
https://www.lionbridge.com/ja/blog/global-marketing/choosing-multilingual-url-structure-5-things-consider/

最初に4つめの方法、URL変数をもちいる方法について検討したのだが、じつはこの方法は非推奨な方法なのである。これについては以下の方法をみてほしい。これを見てみると、上の3つの方法を使えと言っているようである。
https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites?hl=ja&visit_id=638053052563262007-3947425681&rd=1#locale-specific-urls

他にもみてみよう。
https://support.google.com/webmasters/thread/11109792/多言語サイトについて、urlパラメーターで各言語ごとのurlを作成しても問題はないでしょうか??hl=ja
https://web.find-content.jp/SEOblog/duplicate-contents-and-automatically-generated-pages-of-multilingual-sites-using-parameters
う〜ん。やっぱりurl変数でlanguage変更をするのはseo的には良くないため、この方法には将来性が無いようだ。もしurl変数を使えたら以下のfunctionを用いて簡単に利用できるが…。

多言語変更
// 多言語に対応するための関数

function lang_match($ja,$en,$cn,$kr){
	isset($_GET['lang']) ? $lang = $_GET['lang'] : $lang = 'ja';
	switch($lang){
		case 'ja':
			echo $ja;
			break;
		case 'en':
			echo $en;
			break;
		case 'cn':
			echo $cn;
			break;
		case 'kr':
			echo $kr;
			break;
		default:
			echo $ja;
			break;
	}
	return null;
}

では今回は次にサブディレクトリを用いてurlを管理することを考えよう。ただスラッグに多重階層をもたせるのはwordpressには無理だな、、と思って考えていた際、こんなサイトがあった。
https://www-creators.com/archives/42
wordpressのプラグインを用いれば多言語対応ができるではないか。自分は今の御時世phpなんてwordpress有りきでしか使わないし、わざわざ独自の関数を作成するまでもないなと思ったので、urlの生成に対してはコレに頼ることにする。

サブディレクトリから言語を取得する

プラグインのおかげで言語表示が死ぬほど楽にはなったが、サブディレクトリからphpが言語を取得するにはどうしたら良いのか。それには、以下のサイトが頼りになった。
https://blog.codecamp.jp/php-request-url
これを用いて、以下のように関数を再作成する。

サブディレクトリから言語取得
function lang_match($ja,$en,$zn,$ko){
	$server = $_SERVER['REQUEST_URI'];
	$serverArray = explode("/",$server); //それぞれの言語の取得
	if(count($serverArray) >=2){
		$lang = $serverArray[1];
		switch($lang){
			case 'ja':
				echo $ja;
				break;
			case 'en':
				echo $en;
				break;
			case 'zn':
				echo $zn;
				break;
			case 'ko':
				echo $ko;
				break;
			default:
				echo $ja;
				break;
		}
	}else{
		echo $ja;
	}
	return null;
}

これによって言語別に対応することもできるようになった。

ACFを使ってもっと可変に

もしも文章を変更する手間をなくしたいと言うなら、ACFを使えばもっと簡単に多言語対応できる。参考にしたのは以下のサイト。世の中ってめちゃくちゃ便利だな。polylangを用いれば、同じフィールドタグに対して別の文章を入れられるから、簡単に文章変更ができる。
http://galileo-venus.com/2020/05/20/20200518_wp_acfout/#基本の出力

終わりに

Wordpressには本当に便利なプラグインがあるものだ。ありがとうプラグインを作ったどこかのおじさん。

Discussion