7

我有一个多语言网站。切换到“印度”后,有没有办法可以将其更改logo.png为不同的?.png我现在正在使用 polylang 插件。我尝试了这个解决方案,但它不起作用 - https://support.pojo.me/docs/polylang-change-logo-every-language/

有谁知道如何解决这个问题?

我的代码

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' );
4

6 回答 6

2

我们在一个包含 14 个类别的博客上做了几乎相同的操作,每个类别都必须显示自己的徽标。

在我们的例子中,我们使用了自定义 php 代码,它检查 url 并相应地覆盖主题中的徽标显示,同时从 db 的徽标路径中获取徽标。

在您的情况下,它应该更容易,因为语言变量很容易访问,所以您在主题的 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; ?>"

希望这就是你要找的。

于 2018-03-19T17:29:32.347 回答
1

如果您的页面是 SEO 友好的并且您更改<html lang=''>为不同的语言,那么您可以通过 jQuery 在客户端更改徽标。

于 2018-03-24T19:35:01.367 回答
1

我不建议在 PHP 中执行此操作,因为这会使您的缓存无效,进而影响您的性能。相反,您应该使用 JavaScript、JQuery 根据您的语言属性更改徽标。

编辑:看起来 WPML 通过安装 WPML 字符串翻译扩展实际上允许这样做。

于 2018-03-25T12:04:57.850 回答
1

您可以轻松注册一个名为 LOGO 的字符串并将所有链接(或名称)放入其中!

第 1 步:在 functions.php 中添加以下代码

pll_register_string("LOGO","example.com/path/to/images/logo.png"); // this url for default language

第 2 步:现在在您wp-admin的“字符串翻译”下Languages,您可以使用所有语言的“LOGO”字段。

预习

第 3 步:要获取徽标 URL(所有语言),只需使用以下代码:

<?php pll_e("LOGO"); ?>

注意:如果您只想在此字段中输入徽标名称,您的代码应如下所示:

<?php 
$assets_url = get_stylesheet_directory_uri() . '/assets/images/';
echo $assets_url; pll_e("LOGO"); ?>
于 2018-03-24T19:28:48.527 回答
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' );

如果你看一下$assets_url$return $value你会看到一个 if 语句:

        $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

从我所看到的情况来看,我可以看到一个错误,因为 if 语句不包括{},如果您将其更改为以下内容,它可能会起作用?

        $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
于 2018-03-25T20:47:50.523 回答
1

在您的代码中,您设置了$default_logo = $logos['en'];并且您的$current_lang值也是“en”,因此当您更改语言时,您的 $current_lang 值需要根据所选语言的短代码进行更改,否则您的 $default_logo 和 $value 将是相同的..

于 2018-03-19T09:57:04.773 回答