我有一个多语种网站。有没有办法在切换到" India"后我可以将logo.png
更改为其他.png
?我现在正在使用polylang插件。我尝试了这个解决方案,但它不起作用 - http://localhost/Home/Index。
有人知道如何解决这个问题吗?
我的代码
function pojo_polylang_get_multilang_logo( $value ) {
if ( function_exists( 'pll_current_language' ) ) {
$logos = array(
'en' => 'logo-en.png',
'in' => 'logo-in.png',
);
$default_logo = $logos['en'];
$current_lang = pll_current_language();
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
if ( isset( $logos[ $current_lang ] ) )
$value = $assets_url . $logos[ $current_lang ];
else
$value = $assets_url . $default_logo;
}
return $value;
}
add_filter( 'theme_mod_image_logo', 'pojo_polylang_get_multilang_logo' );
答案 0 :(得分:2)
我们在包含14个类别的博客上做了几乎相同的事情,每个类别都必须显示自己的徽标。
在我们的案例中,我们使用自定义的PHP代码,它会检查网址并相应地覆盖主题中的徽标显示,同时从数据库的徽标路径中获取徽标。
在你的情况下,它应该更容易,因为语言变量很容易访问,所以你需要在主题的header.php中做的是在从数据库中获取徽标图像时围绕徽标的if语句(最好来自选项表)取决于语言。
//fetch the current language ( you can use https://polylang.pro/doc/function-reference/)
$current_language = pll_current_language();
//while fetching the logo for the current language, it's best if you add a fallback to the default language in case the option for the current language is not set
$logo_image = get_option("logo_".$current_language,"logo_".$pll_default_language());
?> <img class="logo" src="<?php echo $logo_image; ?>"
希望这是你正在寻找的。 p>
答案 1 :(得分:1)
在您的代码中,您设置了$default_logo = $logos['en'];
,而您的$current_lang
值也是&#39; en&#39;因此,当您更改语言时,您的$ current_lang值需要根据所选语言的短代码进行更改,否则您的$ default_logo和$值将相同..
答案 2 :(得分:1)
您可以轻松注册名为LOGO的字符串并将所有链接(或名称)放入其中!
第1步:在functions.php中添加以下代码
pll_register_string("LOGO","example.com/path/to/images/logo.png"); // this url for default language
第2步:现在使用wp-admin
in&#34;字符串翻译&#34;在Languages
下,你有&#34; LOGO&#34;提供所有语言的字段。
第3步:要获取徽标网址(使用所有语言),只需使用以下代码:
<?php pll_e("LOGO"); ?>
注意:如果您只想在此字段中添加徽标名称,则代码应如下所示:
<?php
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
echo $assets_url; pll_e("LOGO"); ?>
答案 3 :(得分:1)
如果您的网页是SEO友好的,并且您为不同的语言更改了<html lang=''>
,那么您可以通过jQuery在客户端更改徽标。
答案 4 :(得分:1)
我不建议在PHP中执行此操作,因为这会使缓存失效,从而影响您的性能。相反,您应该使用JavaScript,JQuery根据您的语言属性更改徽标。
编辑: 看起来WPML实际上允许通过安装WPML String Translations扩展。
答案 5 :(得分:1)
function pojo_polylang_get_multilang_logo( $value ) {
if ( function_exists( 'pll_current_language' ) ) {
$logos = array(
'en' => 'logo-en.png',
'in' => 'logo-in.png',
);
$default_logo = $logos['en'];
$current_lang = pll_current_language();
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
if ( isset( $logos[ $current_lang ] ) )
$value = $assets_url . $logos[ $current_lang ];
else
$value = $assets_url . $default_logo;
}
return $value;
}
add_filter( 'theme_mod_image_logo', 'pojo_polylang_get_multilang_logo' );
if you have a look from $assets_url
to $return $value
you will see an if statement :
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
if ( isset( $logos[ $current_lang ] ) )
$value = $assets_url . $logos[ $current_lang ];
else
$value = $assets_url . $default_logo;
}
return $value
from what I am looking at I can see an error as the if statement does not include {}
maybe if you changed it to the following it might work?
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
if ( isset( $logos[ $current_lang ] ) ) {
$value = $assets_url . $logos[ $current_lang ];
} else {
$value = $assets_url . $default_logo;
}
}
return $value