添加用于外语支持的URL前缀

时间:2019-08-20 作者:Bilwo

我做了一些研究,将其用于我自己的复杂系统(使用插件或Functions.php).

事实上,我想做的是添加prefix 在WordPress的URL结构的最开始,并在必要时将其作为查询变量读取。

例如:DEFAULT: localhost/hello-world

EN: localhost/en/hello-world

FR: localhost/fr/category/apple

DE: localhost/de/2019/

还有更多。。。

这里的基本逻辑是添加预先确定的语言列表,例如array(\'en\', \'fr\', \'ru\', \'de\'), 作为前端。

但实际上localhost/en/hello-world 应该向我提供查询localhost/hello-world?Lang=en 在后台。

此时:我尝试了以下函数,但没有结果。

function custom_rewrite_basic () {
  add_rewrite_rule (\'^([0-9]+)/?\', \'index.php?lang=$matches[1]\', \'top\');
  flush_rewrite_rules(false);
}
add_action(\'init\', \'custom_rewrite_basic\');
在这一切之后,我想做一些事情,

<?php add_rewrite_endpoint($name, $places); ?>
但此函数会添加URL的结尾,而不是开头。我不要这个。此外,此函数不会返回类似“lang=en”的查询。

<?php add_rewrite_endpoint(\'en\', EPP_ALL); ?>
我不知道我最后会做什么。

我只想,

如果查询如"/en/""lang=en" ,将相应的变量传递给我的wordpress查询。

1 个回复
最合适的回答,由SO网友:Radek Mezuláník 整理而成

你确定你有正确的正则表达式吗?你也不应该使用flush_rewrite_rules() 在…上init 钩最好直接在admin中重新保存permalinks选项,这样就不会每次刷新规则。

尝试将regex改为all chars,否则看起来不错。

add_rewrite_rule (\'^([^/]*)/?\', \'index.php?lang=$matches[1]\', \'top\');

UPDATE:

然后需要向允许的查询变量添加参数

function custom_rewrite_basic_query_vars( $query_vars ){
    $query_vars[] = \'lang\';
    return $query_vars;
}
add_filter( \'query_vars\', \'custom_rewrite_basic_query_vars\' );
在主题中,您可以像这样处理查询

$lang = urldecode(get_query_var(\'lang\'));

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。