プログラミング

WordPress PHPで多言語に対応したページを実装する

WordPress PHPで多言語に対応したページを実装する方法について紹介します。

プラグインなどを入れると、全てのページが多言語になってしまいます。僕もやったことあるんですがなんか面倒になって消しました。
PHPで、日本ならこのHTML,英語諸国ならこのHTML,みたいにやりたい。それに、多言語にするページはそんなにたくさんなく、いくつかの記事だけである、なんて場合はなおさらプラグインとか入れたくないです。

じゃあコード。


$exp = function ($v) { return $v; };

function GetIP()
{
    foreach (array('HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key)
    {
        if (array_key_exists($key, $_SERVER) === true)
        {
            foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip)
            {
                if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false)
                {
                    return $ip;
                }
            }
        }
    }
}

function multilanguageaboutme($the_content) {
    // if (is_single() && in_category(array('プログラミング'))) {

    if ( !is_page() && get_the_ID()=='10') {

      $return = "";
      $return .= $the_content;

    global $exp ;

if ( shell_exec("curl \"https://ipapi.co/{$exp(GetIP())}/json/\" | python -c 'import json,sys;print json.load(sys.stdin)[\"country_name\"]' | perl -pe \"chomp\"") == "Japan" ){
  // echo "Japan" ;

$return .= <<<'Japanese'

<p>

はじめまして。Fumiyaです。

</p>

Japanese;

} else {
  // echo "Not Japan" ;

$return .= <<<'English'

<p>

Nice to meet you. I'm Fumiya.

</p>

English;

}

        return $return;

  } else {

    $return = $the_content ;
    return $return;

  }

}

// enable/disable
add_filter('the_content','multilanguageaboutme');

このコードをfunctions.phpかどっかに置けばおk.

見たとおり、IPアドレスでどこの国か見分けて、返り値がjapanなら日本語のHTMLを返し、それ以外なら英語のそれを返します。

VPN経由してアクセスすると

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_4906988f-551b-4092-9734-f4acde4b2c7d.png

日本からアクセスすると

https://yuis.xsrv.jp/images/ss/ShareX_ScreenShot_a09312a7-6138-4156-9e89-61ffa5029afb.png

get_the_ID()=='10'は記事IDです。この記事はタイトルだけにして本文を空白にしておきましょう。

shell_exec("curl \"https://ipapi.co/{$exp(GetIP())}/json/\" | python -c 'import json,sys;print json.load(sys.stdin)[\"country_name\"]' | perl -pe \"chomp\"")が少し複雑ですが、外部コマンド実行してるだけです。

PHP単体でもいくらでもできるのでしょうが、僕はbashばっかいじってるのでわざわざ外部コマンドから結果を受け取っています。どうせアクセス数も知れてますし、数万程度だったらなんら負担にはならないでしょう。それにレンサバだし。メール来たら対応すればよいです。

蛇足

ちなみに、さっき調べて知ったのですが、多言語サイトを作る場合はURLを分けたほうがSEOいいらしいです。Googleが言ってるようです。
JSやクッキーで分岐させて表示を変えるとかってのもよろしくないらしい。なんとなく分かってた。

でもトップページだけ二言語、アバウトページだけ、とかだったらこういう手法をとっても良いと思ってます。まぁ、多少はね?

google – SEO implications of having multiple languages available at same URL – Webmasters Stack Exchange
Managing multi-regional and multilingual sites – Search Console Help

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です