- English
- 日本語
概要
みなさんこんにちはcandleです。
今回はbogoプラグインのカスタマイズです。bogoはwordpressのサイトを簡単に他言語に対応することができる素晴らしいプラグインです。
ただ、言語の指定で汎用性英語を選べない問題があります。
英語の記事を書く時、必ずしも国を限定して書いているわけではない場合があります。
ところがbogoには「en-UK」や「en-CA」や「en-US」は選べるのですが「en」が選べません。
ソースコードを見た所、これは言語一覧をwordpressの関数から持ってきていて、その中に汎用性英語がないからです。
対策として、実践したのが、とりあえず「en-US」を選び、表示する時だけ、文字列を置換して「en」と表示する様にしました。
もしかすると、今後の開発でこの辺が修正されるかもしれません。
ちなみに言語に「en」を選ぶことはgoogleの公式にも可能であると記述されてます。
https://support.google.com/webmasters/answer/189077?hl=ja
関連記事
前提
wordpressにbogoがインストールされている
wordpressテーマをいじることができる
en-USがどこで使われているか確認する
最初に、どこでen-USが使われているか、確認します。
自分のブログの英語に翻訳されたページでwebインスペクタを開いて、
DOMに対して「en-US」を検索してみます。
最初にわかるのはhtmlタグのlangの値です。
<!–[if lt IE 7]>
<html class=”ie6″ lang=”en-US”> <![endif]–>
<!–[if IE 7]>
<html class=”i7″ lang=”en-US”> <![endif]–>
<!–[if IE 8]>
<html class=”ie” lang=”en-US”> <![endif]–>
<!–[if gt IE 8]><!–>
<html lang=”en-US”>
次に、headerタグの中のlinkタグのalternateの値です。
link alternateで指定されたURLは同一コンテンツで翻訳したものですよという記述です。
<link rel=”alternate” hreflang=”ja” href=”http://localhost:8080/alice_blog/wp/2016/02/14/23/” />
最後の1つはbodyの所にclass属性でen-USが付いているのですが、そちらは変更してもしなくてもSEOには関係ないので、放置します。
まとめると
htmlのlangの値とalternateの値をen-USからenに変更する必要が有ります。
htmlのlangの値を変更する
htmlのlangを変更するにあたって、以下のサイトを参考にさせてもらいました。
https://wordpress.org/support/topic/how-to-change-the-hreflang-annotation-and-the-lang-attribute-from-en-us-to-en/
自分のテーマのフォルダの中にあるfunctions.phpを開きます。ない場合は作ります。
一般に以下の場所にあります。
wp-content/themes/テーマ名/functions.php
開いたら、以下を記述しましょう。
add_filter( 'language_attributes', 'language_attributes_fix' ); function language_attributes_fix( $language_attributes ) { return str_replace('en-US','en', $language_attributes); }
保存したら、再度ブログを確認してみましょう。
lang=”en”になっています。
alternateの値を変更する
今度はalternateの値をenに変更します。
同じく、functions.phpに以下を記述しましょう。
add_filter( 'bogo_rel_alternate_hreflang', 'bogo_rel_alternate_hreflang_fix' ); function bogo_rel_alternate_hreflang_fix($languages) { foreach ($languages as $key => $language ) { $languages[$key]["hreflang"] = str_replace('en-US', "en", $language["hreflang"]); } return $languages; }
このソースコードは汎用性を高めるために$languagesをforeachで回して、
全ての言語に対して置換をかけていますが、
もしも、$languages配列のどの場所にen-USが入っているかわかっているならこの様に書いた方がパフォーマンスは上がります。
$languages[1][“hreflang”] = str_replace(‘en-US’, “en”, $languages[1][“hreflang”]);
return $languages;
}
正し、新しく翻訳する言語を加えたりすると、配列の位置が変わるので注意してください。
確認すると、alternateがenになっています。
以上になります。
まとめ
上記の方法でひとまず、最終的に見える形ではen-USからenに以降ができました。