🧊

力づくでWordPressの記事を多言語化してるように見せる

スマートなやり方ではないものの、わざわざプラグインを入れるまでもないし・・、という場合に。
例えば、日本語と英語のページを用意したいとします。

シーンとしては・・、

  • WordPressで固定ページを数ページ用意していて、それを多言語化する必要がある。
  • プラグインをなんらかの事情で使えない。

用意するもの

  • 日本語で投稿した記事(記事IDをメモ!)
  • 英語で投稿した記事(記事IDをメモ!)
  • 言語設定を判定する関数(functions.phpにでも。)

言語環境をチェック

すごく雑把ですが、日本語か英語かをチェック。

function isJP(){
	$l = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
	if (($l) && ( $l == 'ja' )){
		return true;
	}else{
		return false;
	}
}

$_SERVER['HTTP_ACCEPT_LANGUAGE'] では、パソコンの言語設定で何を優先的に使うようにしているかがわかります。
戻ってくる値は、

echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
//ja,en-US;q=0.8,en;q=0.6

横についてる数字が優先度で、1位のやつは1.0です。
複数1位になる場合もあるので、「日本語を最優先にしている」もののみを、isJP()で判定してます。

isJP()に応じて記事を表示する

後は記事を読んでるところで・・、

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
	<header>
		<h2><?php the_title(); ?></h2>
	</header>
	<div id="page_cnt">
	<?php 
		if(isJP()){
			$id = 47; // さっきメモした記事ID
			$cnt = get_post($id); // 必ず変数で指定
			echo $cnt->post_content; // post_contentで本文、post_titleならタイトル
		}else{
			the_content(); // 日本語以外なので、今回は英語の記事を通常出力
		} ?>
	</div>			
</article>

get_post()関数へは、変数で記事IDを投げる必要があるそうです。
で、取得した記事オブジェクトから、本文なりタグなりタイトルを取得。

という感じで、力づくで多言語化!
・・・普通にしてたら使わんやろなぁw