php - WordPress、重定向和 WPML

标签 php wordpress wpml

我全新安装了 wordpress,我在 functions.php 中写了一些快速重写规则,如下所示 -

//  "rewrite" /assets/xyz to /assets/?asset=xyz

function assets_rewrite_rule($rules) {
   global $wp_rewrite;
   $asset_rule = array( // (not tested)
     'assets/(.+)/?' => 'index.php?pagename=Assets&asset=$matches[1]'
   );
   return array_merge($asset_rule, $rules);
}
add_filter('page_rewrite_rules', 'assets_rewrite_rules');

我用 WPML 和字符串翻译以最原始的方式翻译了我的侧边栏。

这是我侧边栏的英文部分(未翻译)-

<div class="sideall"> 
<div class="sidebar-mai1"> 
<div class="sidebar-name">
<img style="width: 25px; margin-right: 10px; margin-bottom: -7px;" title="first asset" src="/wp-content/images/sidbar-assets/firstasset.png" alt="first asset" />First Asset</div> 
<div class="sidebar-btn">
<a class="btn-sidebar" href="/assets/first-asset/">Review</a>
<a class="btn-sidebar1" href="/buy/first-asset">Trade Now!</a></div> 
<div style="clear: both;"></div> 
</div>

在尝试翻译成其他语言(比方说意大利语)时,wpml 拒绝保存我对评论链接所做的更改。就像我的重定向规则以某种方式影响它一样。

这是我添加到侧边栏的翻译 -

<div class="sideall"> 
<div class="sidebar-mai1"> 
<div class="sidebar-name">
<img style="width: 25px; margin-right: 10px; margin-bottom: -7px;" title="first asset" src="/wp-content/images/sidbar-assets/firstasset.png" alt="first asset" />First Asset</div> 
<div class="sidebar-btn">
<a class="btn-sidebar" href="/it/assets/first-asset/">Revisione</a>
<a class="btn-sidebar1" href="/buy-it/first-asset">Scambia ora!</a></div> 
<div style="clear: both;"></div> 
</div>

如您所见,评论购买 链接都已更改。但是在我点击保存后,它只会保存我在 中所做的更改购买 href,但它会恢复我对评论链接的更改,保存后看起来像这样 -

<div class="sideall"> 
<div class="sidebar-mai1"> 
<div class="sidebar-name">
<img style="width: 25px; margin-right: 10px; margin-bottom: -7px;" title="first asset" src="/wp-content/images/sidbar-assets/firstasset.png" alt="first asset" />First Asset</div> 
<div class="sidebar-btn">
<a class="btn-sidebar" href="/it/assets">Revisione</a>
<a class="btn-sidebar1" href="/buy-it/first-asset">Scambia ora!</a></div> 
<div style="clear: both;"></div> 
</div>

如您所见,在我点击保存后,它从我的翻译中删除了/first-asset 部分,现在它导致一个空页面 (/it/assets) ..我想知道这是否可能是由于重写的结果..

最佳答案

解决此问题的另一种方法:

聆听客户的浏览器设置。

locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']);

https://secure.php.net/manual/en/locale.acceptfromhttp.php

然后您可以将其重写为这样的函数:

function my_get_langauge() {
    static $lang;
    if(is_null($lang)) {
        $lang = strtolower(substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2));
        /**
         * Check list of allowed/accepted languages or revert to default
         */
        if(!in_array($lang, ['nl','en','de','it']) )
        {
            $lang = 'en';
        }
    }
    return $lang;
}

这样您就不必担心语言重定向,您可以接受网站用户希望看到的语言。

关于php - WordPress、重定向和 WPML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49107676/

相关文章:

php - 在mysql中随机化结果

wordpress - 无法更新到 WordPress 4.7.2 - 错误 : inconsistent file permissions

javascript - 我如何使用 WPML 翻译 javascript 中的 html 文本

php - 将 JSON 值转换为 PHP 字符串

php - 为什么我会收到此编译器错误。语法对我来说是正确的

css - 无法设置标题和图片之间的边距

php - 导入数据库时​​出现utf8mb4_unicode_520_ci错误

javascript - 移动菜单 (js) 未在 WordPress WPML 网站上加载

php - WPML - 购物车项目数据自定义字段在切换语言时不更新

内置服务器的 PHP Storm 无法识别 mod_rewrite