这里有几点需要分享,因为我可以预见评论会很长,我在这里发布了一些建议供参考,希望能够解决这个问题。
关于重写的第一点
$newrules[\'/(\\d*)$\'] = \'index.php?city=$matches[1]\';
我猜您希望使用如下url
https://example.com/new_york/
城市将占据的道路
new_york
比如城市=纽约。然而,规则
(\\d*)
它只希望筛选出数字,因此将忽略0-9以外的字符。
只是猜测它会是([^/]+)
不包括斜杠“/”,+将任何字符1匹配到无限次,表示捕获组
$newrules[\'([^/]+)/?$\'] = \'index.php?city=$matches[1]\';
请尝试此中的正则表达式
tool(该工具需要退出
/
=> 编写为
\\/
, 在php代码中,您不需要这样做)
关于优先级的第二点rewrite_rules_array
使用,以便将上面的规则添加到规则的末尾(如果有其他插件也这样做,则添加到近端)。重写规则按顺序匹配。因此,有可能404是在规则与类似模式匹配之前确定的。
可以通过多种方式将规则置于更高的优先级,例如放入其他早期的规则筛选器或使用add\\u rewrite\\u rule()和top
属性使其以更高的优先级匹配。换言之,首先匹配此规则的可能性会增加,并可能导致其他不期望的效果。因此,有必要进行彻底的测试,以满足您的需求。Please expect testing and adjustment to be made before it comes to satisfaction.
请参阅不同过滤器的文档:
function wpdocs_insert_rewrite_rules( $rules ) {
$newrules = array();
$newrules[\'([^/]+)/?$\'] = \'index.php?city=$matches[1]\';
return $newrules + $rules;
}
add_filter( \'TRY_CHANGING_FILER_HERE_IF_LOADING_PRIORITY_MATTERS\',\'wpdocs_insert_rewrite_rules\' );
使用上述过滤器的另一种方法是使用
add_rewrite_rule()add_action(\'init\', \'ws366689_insert_rewrite_rules\' );
function ws366689_insert_rewrite_rules() {
add_rewrite_rule(\'([^/]+)/?$\', \'index.php?city=$matches[1]\', \'top\');
}
关于写入格式,我个人认为您可以使用文档中显示的格式来编写数组,以简化和清晰。
function wpdocs_insert_query_vars( $vars ) {
$vars[] = \'city\';
return $vars;
}
add_filter( \'query_vars\',\'wpdocs_insert_query_vars\' );
还需要更新wpdocs\\u flush\\u rules()中的规则。