WordPress当我点击其他语言时更改徽标图像

时间:2018-02-24 07:33:43

标签: php wordpress polylang

我有一个多语种网站。有没有办法在切换到" 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' );

6 个答案:

答案 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; ?>"

希望这是你正在寻找的。

答案 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;提供所有语言的字段。

preview

第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