WordPressのサイト多言語化プラグイン「Polylang」で、TOPのURLを変更させたくない時とかのメモ

Webサイトの多言語化、、面倒臭いですよね。ページの管理だけでもWordPressのプラグインを使えば捗るので、試しに割と評判の良い「Polylang」導入してみました。
home_url()が勝手に変換される現象に困ったこととか、ヘッダーフッターを言語ごとに切り替えるやり方とかのメモ。

TOPページへのリンクURLが勝手に変換される

使用目的は、サイトの一部のページを多言語化するにあたり、言語別ページを管理しやすくできればと思った次第。

スクリーンショット 2018-05-30 0.25.21

プラグインをインストール後、サイドメニュー「言語」から使用言語を追加して、、、設定をいじると。。

ssninini

各言語の使用状況やらが見やすくていい感じー(語彙力)。

目的はこれで果たせたのだけど、サイトを見てみると一つ問題が、、、

デフォルトの設定だと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 =&gt; $url ) {
				printf( '&lt;link rel="alternate" href="%s" hreflang="%s" /&gt;' . "\n", esc_url( $url ), esc_attr( $lang ) );
			}

get_pages等で現在の言語の情報しか取得できない

プラグインフォルダのinclude/filters.phpの29行目あたりに記述されているやつのせいみたい。

		add_filter( 'get_pages', array( $this, 'get_pages' ), 10, 2 );

参考:
github:polylang

言語ごとのサイトを作るのであれば素晴らしいプラグインですが、一つのサイトに多言語ページを用意する様なサイトだと、結構カスタマイズが必要だと感じました。へば、よき多言語ライフを。