【WordPress】多言語対応プラグインPolylangでhome_url()を使うときに気を付けること

【WordPress】多言語対応プラグインPolylangでhome_url()を使うときに気を付けること

みなさんこんにちは、yamashitaです。
6月からクーラーをフル稼働していて8月にはどうなっていることやら心配です。

さて今回はPolylangプラグインを設定している状態でhome_url()を使う際の注意点を一つ紹介したいと思います。

Polylangとは

設定することで多言語ページのURLを設定してくれるプラグインで、各投稿・ページにも対応するページが存在するか一覧で確認できるようになります。
今のところ自分は使用していませんが、有料版には自動翻訳もあるようです。

home_url()の動作

テンプレート上で使用する場合はほとんど通常時と同じ感覚で使って大丈夫です。
出力内容は以下の通りです。

  • デフォルト言語ページの場合、http://example.co.jp/の様にトップのURLがそのまま出力されます。
  • 他の言語ページの場合、http://example.co.jp/enの様にトップのURLに言語スラッグが追加されたURLが表示されます。

※何れも「 フロントページの URL にページ名またはページ ID の代わりに言語コードが含まれています」と「URL にデフォルトの言語の言語情報を表示しない」にチェックが入っている場合に限ります。

home_url()をテンプレート表示以前に使う場合

アクションフックなどを使って言語に応じたhome_url()を出力しようとすると注意が必要です。
アクションフックの事項順に調べたところ、parse_queryのフックからPolylangの処理が入っているようで、デフォルト以外の言語だと言語スラッグがURLに追加されています。
それ以前のフックでhome_url()を出力すると言語に拘わらず、http://example.co.jp/の様なデフォルトのフロントページのURLが表示されます。

search_form.php内で使用する場合

「URL にデフォルトの言語の言語情報を表示しない」にチェックが無い場合のみの注意点です。
この設定をチェックしていないとhttp://example.co.jp/en/xxxxxxの様に言語スラッグとページスラッグが表示されます。
しかし、search_form.phphome_url()を記載し、get_search_form()から呼び出す場合のみ例外として言語スラッグのみの追加になります。
おそらく検索URLに配慮しての機能だと思うのですが、不意を突かれるので覚えておいたほうがいいかもしれないです。

最後に

Polylangは便利なプラグインですが、このように、ある程度仕様を理解しておかないと痛い目を見るような気がします。
テンプレートタグの動作に注意が必要だと思ったので他のものも色々試してみたいと思います。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ