Webサイトの多言語化、、面倒臭いですよね。ページの管理だけでもWordPressのプラグインを使えば捗るので、試しに割と評判の良い「Polylang」導入してみました。
home_url()が勝手に変換される現象に困ったこととか、ヘッダーフッターを言語ごとに切り替えるやり方とかのメモ。
TOPページへのリンクURLが勝手に変換される
使用目的は、サイトの一部のページを多言語化するにあたり、言語別ページを管理しやすくできればと思った次第。
プラグインをインストール後、サイドメニュー「言語」から使用言語を追加して、、、設定をいじると。。
各言語の使用状況やらが見やすくていい感じー(語彙力)。
目的はこれで果たせたのだけど、サイトを見てみると一つ問題が、、、
デフォルトの設定だとWP関数「home_url」を使用したリンクURLに、「http:xx.com/en/」の様に言語の文字が自動で追加されてしまうのだ。
TOPページは日本語しか用意していないのでこれは困る。。
解決策
Polylang公式のサイトに、デフォルト設定を変更する関数が書いてあったので、下記をfunctions.phpに追記したら無事解決しました。めでたしめでたし。
define('PLL_FILTER_HOME_URL', false);
言語ごとのパラメータの呼び出し
現在ページのロケール:get_locale();
現在ページの言語コード:pll_current_language();
翻訳ページのヘッダー等を切り替えたい場合は、テンプレートパーツの呼び出し部分を
<?php
$pll_lang = pll_current_language()
?>
<?php get_header($pll_lang); ?>
<?php get_footer($pll_lang); ?>
の様にして、header-en.php等のファイルで切り替えても良さそう。
参考:
How to Polylang
Function reference Polylang
headタグに他言語のリンクが自動挿入される
デフォルトだとrel属性alternateの他言語へのリンクが自動生成されてしまう。。
プラグインフォルダのfrontend/frontend-filters-links.phpの198行目あたりに下記の様な表示があったのでモニョモニョする。
$hreflangs = apply_filters( 'pll_rel_hreflang_attributes', $hreflangs );
foreach ( $hreflangs as $lang => $url ) {
printf( '<link rel="alternate" href="%s" hreflang="%s" />' . "\n", esc_url( $url ), esc_attr( $lang ) );
}
get_pages等で現在の言語の情報しか取得できない
プラグインフォルダのinclude/filters.phpの29行目あたりに記述されているやつのせいみたい。
add_filter( 'get_pages', array( $this, 'get_pages' ), 10, 2 );
言語ごとのサイトを作るのであれば素晴らしいプラグインですが、一つのサイトに多言語ページを用意する様なサイトだと、結構カスタマイズが必要だと感じました。へば、よき多言語ライフを。