WordPressの多言語対応プラグインBogoを使用している場合、以下のコードで言語の切替スイッチを表示できる。
<?php echo do_shortcode( '[bogo]' ); ?>
表示される言語スイッチは以下の通り。
ただ、サイトのデザインによっては、カスタマイズしたいところ。
今回は試しに、以下の条件でカスタマイズしてみる。
- 切替先の言語のみを表示
- 切替先の言語ページが存在しない場合は切替先の言語のトップページへ移動する
サンプルコード
functions.php
/** Bogo 言語スイッチオーバーライド */
function my_language_switcher( $args = '' ) {
$args = wp_parse_args(
$args,
array(
'echo' => false,
)
);
$output = '';
// 言語セット取得.
$links = bogo_language_switcher_links( $args );
foreach ( $links as $link ) {
if ( get_locale() === $link['locale'] ) {
// 表示中の言語は表示しない.
continue;
}
$label = $link['native_name'] ? $link['native_name'] : $link['title'];
$title = $link['title'];
// 切替先の言語ページが存在しない?
if ( empty( $link['href'] ) ) {
// 切替先の言語のトップページへ移動する.
$url = home_url();
if ( 'en_US' === $link['locale'] ) {
$url = path_combine( array( $url, '/en/' ) );
}
$output = sprintf(
'<a href="%1$s" title="%2$s">%3$s</a>',
$url,
esc_attr( $title ),
esc_html( str_replace( ' (United States)', '', $label ) )
);
} else {
$output = sprintf(
'<a rel="alternate" hreflang="%1$s" href="%2$s" title="%3$s">%4$s</a>',
$link['lang'],
esc_url( $link['href'] ),
esc_attr( $title ),
esc_html( str_replace( ' (United States)', '', $label ) )
);
}
break;
}
$output = apply_filters( 'bogo_language_switcher', $output, $args );
if ( $args['echo'] ) {
echo $output;
} else {
return $output;
}
}
remove_shortcode( 'bogo', 'bogo_language_switcher' );
add_shortcode( 'bogo', 'my_language_switcher' );
/** 内部関数:パス結合 */
function path_combine( $path_arry ) {
$ret_path = ''; // 結果の格納用変数.
$trim_str = DIRECTORY_SEPARATOR; // ディレクトリの区切り文字.
foreach ( $path_arry as $value ) {
if ( empty( $ret_path ) ) {
$ret_path = $value;
} else {
// 末尾と先頭(結合部分の区切り文字)をトリム.
$ret_path = rtrim( $ret_path, $trim_str );
$value = ltrim( $value, $trim_str );
// 改めて結合部分に区切り文字を入れる.
$ret_path = $ret_path . $trim_str . $value;
}
}
return $ret_path;
}
解説
上記コードを、テーマのfunctions.phpに記載したうえで、言語スイッチャーの表示コードを呼び出す。
すると、「日本語」⇔「English」と切替先の言語スイッチャーのみが表示されるようになる。
また、内部関数はURLの結合用に使っているだけなので、無理に使う必要はない。
今回は2言語のみで英語のみのケースで書いたが、3言語以上に対応する場合は、トップページリンクの作成箇所を修正すればOK。