【发布时间】:2015-09-23 13:59:03
【问题描述】:
我一直在为 wordpress 开发一个可以完全运行的语言插件。现在唯一缺少的是 url 重写。我一直在查看有关 stackoverflow 的很多网站、资源和其他问题,但我似乎无法让我的永久链接正常工作。
我已经能够像这样添加一个查询字符串变量:
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。我现在想要的是添加一个永久结构,以便用户可以拥有漂亮的网址(例如http://www.mylink.com/en/)
我添加了以下代码:
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'));
我想我现在唯一需要的是重写规则,但我可能完全错了。谁知道添加此永久结构的最佳解决方案是什么?
编辑
我一直试图让这个工作一个月,我似乎无法掌握永久链接,即使之前的所有答案和我自己的研究也是如此。所以这就是为什么我再次用赏金来挑战这篇文章。我需要什么:我有一个返回语言代码的函数 (get_locale)。这个语言代码应该在我的url中实现如下:"http://www.mywebsite.com/LANGUAGE_HERE/..."
我知道我需要为此注册自己的永久链接结构,但这就是一切出错的地方。我需要什么过滤器,我应该在过滤器函数中添加什么?非常感谢任何帮助,因为我在这里变得非常绝望。
编辑 2
所以我添加了重写规则,但它们似乎也不起作用。我在这里有点绝望。无论如何,这是重写规则的代码:
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'));
【问题讨论】:
标签: wordpress url-rewriting permalinks