WordPress を手軽に多言語化できる Bogo プラグインの言語切り替えウィジェットを少しだけ改造するメモです。
Bogo はその仕組み上、何ヶ国語でも多言語対応できるのですが、この記事では日本語と英語のバイリンガル サイトを例にしています。
言語切り替えウィジェットの理想と現実
理想とは常に高いものなので、現実が追いつくことはないのです。そんな意味で、筆者が考える理想の言語切り替えウィジェットは以下のような感じ(日本語版の記事を表示している場合)。
表示中の記事に英語版があるとき(理想)
表示中の記事に英語版がないとき(理想)
- English (Not Available)
現実
- 日本語
- 英語
現実の問題点
- 表示中の言語が常にリンク無しで表示される(不要)
- 英語版の有無がリンクの有無でしか分からない
- 言語の表示言語が表示中の言語である(「英語」じゃなくて「English」と表示して欲しい)
この記事では、1番目と 2番目の理想を現実にしました。3番目は… 無理矢理なら どうとでもできるのですが、美しくないので そのままにしました。美しくやろうとすると、割りと大変そう。無茶はしない。格好よく言い訳すると、コストとベネフィットのバランスが大事!
常にリンク無しで表示される表示中の言語を非表示にする
これは簡単でした。
表示中の言語の li 要素には current クラスが付与されているので、以下の CSS を追加してあげれば OK です。
.bogo-language-switcher .current { display: none; }
存在しない言語記事に「Not Available」等の文字列を表示する
CSS で何とかしたい。でも無理でした。いや、CSS の偉い人なら何とかできるのかも知れない。でも筆者には無理でした。となると、もう直接プラグインのコードを書き換えるしかない。初心者にはオススメできない。プラグインがアップデートされたら元に戻っちゃうし。でもプチ改造くらいなら そんなに手間じゃないし、仕方ない。仕方ないと思えるレベルしか書き換えない。これだ。
言語切り替えウィジェットの html を出力しているのは以下の関数です。
bogo/includes/link-template.php bogo_language_switcher
この関数の一部分に以下のハイライトした 1行を加えます。(コードは抜粋です)
function bogo_language_switcher(抜粋)
... if ( $is_singular ) { if ( empty( $translations[$code] ) || $locale == $code ) { $output .= esc_html( $name ); if ( $locale != $code ) $output .= ' (Not Available)'; } else { $output .= '<a rel="alternate" hreflang="' . bogo_language_tag( $code ) . '" href="' . get_permalink( $translations[$code] ) . '">' . esc_html( $name ) . '</a>'; } } else { ...
受け入れた現実
- 英語 (Not Available)
最後に
しばらくの間、言語切り替えウィジェットは使っていなかったのですが、ふと、言語切り替えウィジェットを設置していないと、英語版ページへのリンクが一切無い状態だということに気付きました。内部 SEO 的に各言語サイトが孤立しちゃってた。テヘペロ。一番良いのは、記事の中に「英語版があります(という旨の英語)」とか「日本語版はこちら」とか書いてリンクを張ることだと思います。でも せっかくだから言語切り替えウィジェット使ってみたかったの。
Pingback: Bogo プラグインの言語切り替えウィジェットをプチ カスタマイズ Design Hack and Slash | ミリオンハイスクール | ネットビジネス | WordPress
OMG Ellie this is AMI!!NGZA! That last photo seriously has me drooling. You did such an awesome job putting your own twist on that Quay dessert – WOW!