首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Wordpress:在url中包含语言变量

Wordpress:在url中包含语言变量
EN

Stack Overflow用户
提问于 2015-07-06 20:13:32
回答 4查看 3.5K关注 0票数 17

我一直在为wordpress开发一个语言插件,它完全可以工作。现在唯一缺少的就是url重写。我已经看了很多关于stackoverflow的网站,资源和其他问题,但我似乎不能让我的固定链接工作。

我已经能够像这样添加一个查询字符串变量:

代码语言:javascript
复制
public function append_query_string($url) 
{
    $args = array('lang' => $this->get_locale());
    return add_query_arg($args, $url);
}
add_filter('page_link', array($this, 'append_query_string'));
add_filter('post_link', array($this, 'append_query_string'));
add_filter('the_permalink', array($this, 'append_query_string'));

例如,这会将我的链接更改为http://www.mylink.com?lang=en_us。我现在想要的是添加一个永久结构,这样用户就可以拥有漂亮的url(例如http://www.mylink.com/en/)

我添加了以下代码:

代码语言:javascript
复制
public function add_query_var($vars)
{
    $vars['lang'] = $this->get_locale();
    return $vars;
}
add_filter('request' , array($this, 'add_query_var'), 10, 2 );

public function custom_permastruct() 
{
    add_permastruct('language', '%lang%', false);
}
add_action('wp_loaded', array($this, 'custom_permastruct'));

我想,我现在唯一需要的就是重写规则,但我可能完全错了。谁知道添加这个permastruct的最佳解决方案是什么?

编辑我已经尝试了一个月了,但我似乎无法掌握固定链接,即使有了所有以前的答案和我自己的研究。这就是为什么我再次用赏金撞到这篇文章的原因。我需要:我有一个返回语言代码的函数(get_locale)。此语言代码应在我的url中实现,如下所示:"http://www.mywebsite.com/LANGUAGE_HERE/..."

我知道我需要注册自己的永久链接结构,但这就是问题所在。我需要什么过滤器,我应该在我的过滤器函数中放什么?任何帮助都是非常感谢的,因为我在这里变得非常绝望。

编辑2个

所以我添加了重写规则,但它们似乎也不起作用。我现在有点绝望了。无论如何,这是重写规则的代码:

代码语言:javascript
复制
public function add_rewrite_rules()
{   
    $languages = $this->get_all_languages();
    foreach($languages as $language) {
        add_rewrite_rule('^' . $language->code . '/([^/]*)/?$', 'index.php?lang=$matches[1]', 'top');
    }
}
add_action('init', array($this, 'add_rewrite_rules'));
EN

回答 4

Stack Overflow用户

发布于 2015-07-20 18:03:04

一个正确设置的Wordpress 2.0+会将所有请求重定向到/index.php,这样它就不需要任何htaccess更新了,而且你注册的perma-struct看起来也没问题。我认为剩下的就是使用自定义结构的configuring wordpress to use your %lang struct了,您应该可以使用了

票数 6
EN

Stack Overflow用户

发布于 2015-07-20 21:21:43

尝试以下代码

代码语言:javascript
复制
function custom_rewrite_rules(){
  global $langs; 
   //Array containing locale => pretty permalink key value pair
   /*
    $langs = array (
             'en_us' => 'en',
            )
   */

  foreach($langs as $locale => $lang) {
  add_rewrite_rule(
                   '^'.$lang.'/\/(.*)/?$',
                   'index.php?lang='.$locale,
                   'top'
                   );
  }

}
add_action( 'init', 'custom_rewrite_rules' );
票数 3
EN

Stack Overflow用户

发布于 2015-07-20 21:30:38

我也遇到过永久链接结构的问题。有时单击您想要的固定链接,然后再次保存可以解决问题。因为WordPress会在保存时重写htaccess

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31245556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档