我做了一些研究,将其用于我自己的复杂系统(使用插件或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查询。
最合适的回答,由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\'));