More Related Content
Similar to WordPress 多言語化プラグインqTranslateの紹介 (20)
More from Takashi Uemura (20)
WordPress 多言語化プラグインqTranslateの紹介
- 9. <?php
echo
esc_url(
qtrans_convertURL(home_url('/'),
qtrans_getLanguage())
);
?>
qtrans_getLanguage()
→
‘ja’か
‘en’を返します。
qtrans_convertURL(
$url,
$lang
)
→
$lang用のURLを生成します。
例:
qtrans_convertURL(
‘http://example.com’,
‘ja’
)
→
‘http://example.com’を返す
qtrans_convertURL(
‘http://example.com’,
‘en’
)
→
‘http://example.com/en’を返す
URLは言語によって変わります。例えばHOMEのURLはこうなります。
・日本語のサイト(デフォルト)
http://example.com/
・英語のサイト(第2外国語)
http://example.com/en/
現在、日本語モードで表示しているか、英語モードで表示しているかでHOMEへのリンク
先URLを変えなければいけません。
そのための関数があります。
多言語対応にした場合、URLはどうなる?
- 14. 調べてみると、リンク先URLに en が入ってませんでした。
HOME MENU1
MENU1-‐1
MENU2 MENU3
MENU3-‐1
MENU4
HOMEへのリンク:
http://example.com/
MENU1へのリンク:
http://example.com/en/menu1
MENU3-1へのリンク:
http://example.com/menu3-1 ←NG en が抜けている
←OK en がちゃんと入ってる
←NG en が抜けている
トラブったところ1 カスタムメニューでの不具合
- 16. 追加したフィルターフックの処理
add_filter('walker_nav_menu_start_el',
'qtrans_in_nav_el',
10,
4);
function
qtrans_in_nav_el($item_output,
$item,
$depth,
$args){
if(
$item-‐>menu_order
==
1
){
//
top
contents
のとき
if
(function_exists('qtrans_getLanguage'))
{
if(
qtrans_getLanguage()
==
'en'
){
$item_output
=
preg_replace(
"/(href=".+?)"/",
"$1en/"",
$item_output
);
}
}
}
else
if(
$item-‐>object
==
'custom1'
){
//
post_type:
custom1のとき
if
(function_exists('qtrans_getLanguage'))
{
if(
qtrans_getLanguage()
==
'en'
){
$item_output
=
str_replace(
'/cunstom1/',
'/en/custom1/',
$item_output
);
}
}
}
return
$item_output;
}
- 17. トラブったところ2 他プラグインとの相性
パンくずプラグイン Prime Strategy Bread Crumb を導入していましたが、
qTranslateとの組み合わせでうまく動かないところがありました。
英語ページ表示のとき、HOMEへのリンクは英語のトップページに
リンクして欲しいのだが、日本語のページにリンクされてしまって
いる。
HOME
>
REPORT
- 18. トラブったところ2 他プラグインとの相性
Prime Strategy Bread Crumbプラグインに bread_crumb_after というフック
があったので、これを使って追加処理をfunctions.phpに入れました。
add_filter('bread_crumb_after',
'primestrategy_bread_crumb_after',
10,
2);
function
primestrategy_bread_crumb_after($output,
$args){
if
(function_exists('qtrans_getLanguage'))
{
if(
qtrans_getLanguage()
==
"en"
){
$homeurlstr
=
'href="'
.
get_bloginfo(
'url'
)
.
'/"';
$replacestr
=
'href="'
.
get_bloginfo(
'url'
)
.
'/en/"';
$output
=
str_replace(
$homeurlstr,
$replacestr,
$output
);
}
}
return
$output;
}