サイトを多言語化する際に便利なプラグインWPML
僕も何度かお世話になっているのですが、多言語化する際にちょっとした不具合が起こりました。
それは、オリジナルで作成した検索フォームが日本語と英語で切り替えが出来ない事です。
本来Wordpressは
<?php get_search_form( $echo ); ?>
で検索フォームを設置する場合が多いと思いますが、デザイン等を考慮する場合
<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<div>
<label class="screen-reader-text" for="s"><?php _x( 'Search for:', 'label' ); ?></label>
<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" />
</div>
</form>
この様にバラバラにしてカスタマイズしていくと思います。
この場合、検索の「/?s=検索ワード&lang=ja」の&lang=○○がつかない為、言語での検索切り替えが出来ないのです。(○○の中には日本語の場合ja 英語の場合enが入ります)
これでは多言語化したが、検索バーが使えないという致命的な状態になってしまうので、どうにかこうにかして自由にカスタマイズできる形で日本語と英語の切り替えが出来るように設定しました。
カスタムフィールドを使ってる場合
もし投稿内にカスタムフィールドを使っていて、その内容も検索に反映したい場合はプラグインをインストールします。
Search Everythingが有名なプラグインですが、WPMLの場合はRelevanssiを使用します。
なぜRelevanssiを使用するかと言うと、WPMLがRelevanssiの使用を推奨しているからです。
ここに書かてれいる通りです。
詳しくはこちらを御覧ください。
https://wordpress.org/plugins/relevanssi
フォーム内に以下を追加
<input type="hidden" name="lang" value="<?php if (ICL_LANGUAGE_CODE == 'ja') { ?>ja<?php } elseif (ICL_LANGUAGE_CODE == 'en') {?>en<?php } ?>">
フォーム全体で言うと
<form role="search" method="get" id="searchform" class="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<div>
<label class="screen-reader-text" for="s"><?php _x( 'Search for:', 'label' ); ?></label>
<input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit" value="<?php echo esc_attr_x( 'Search', 'submit button' ); ?>" />
<input type="hidden" name="lang" value="<?php if (ICL_LANGUAGE_CODE == 'ja') { ?>ja<?php } elseif (ICL_LANGUAGE_CODE == 'en') {?>en<?php } ?>">
</div>
</form>
とします。
要するにinput hiddenのvalueの中に言語での条件分岐を入れ、検索を切り替えています。
<?php if (ICL_LANGUAGE_CODE == 'ja') { ?>
ここは日本語の場合のみ表示される
<?php } elseif (ICL_LANGUAGE_CODE == 'en') {?>
ここは英語の場合表示される
<?php } ?>
この条件分岐を使い、日本語と英語の検索切り替えを実装しました。
こういった条件分岐は便利ですね。
コメント