我有一个自定义主题中的现有页面,该页面需要以下格式的URL:/story?user=1
但我也希望能够使用更好的URL,例如:/story/username
.
我尝试在函数中添加重写规则。php如下,这让我半途而废,允许URL/story/1
:
function my_custom_url() {
add_rewrite_rule(\'story/([^/]+)/?\',\'index.php?pagename=story&user=$matches[1]\',\'top\');
}
add_action( \'init\', \'my_custom_url\' );
但是,我仍然希望在URL中使用用户名。为此,我希望将重写规则更改为:
add_rewrite_rule(\'story/([^/]+)/?\',\'index.php?pagename=story&user=\'.get_user_id($matches[1]),\'top\');
在哪里
get_user_id()
是一个返回指定用户名id的函数,但似乎不起作用(使用重写分析器插件测试)。
This answer 将我指向parse_query
hook,所以我尝试了这样的方法(与原始重写规则一起):
function my_query_var() {
if ($user = get_query_var(\'user\')) {
$id = get_user_id($user);
global $wp_query;
$wp_query->set(\'user\',$id);
}
}
add_action(\'parse_query\',\'my_query_var\');
然而,这似乎也不起作用;重写分析器显示,URL的“用户”部分仍然设置为地址栏中“故事”之后键入的内容,而不是
get_user_id()
.
你知道我应该做什么吗?谢谢
Edit
可能值得一提的是,我正在注册
user
变量如下:
function register_query_var($query_vars) {
$query_vars[] = \'user\';
return $query_vars;
}
add_filter(\'query_vars\',\'register_query_var\');
最合适的回答,由SO网友:gmazzap 整理而成
最简单的方法是使用一个简单的重写规则,并要求页面的逻辑,例如。
function my_custom_url() {
add_rewrite_rule(\'story/([^/]+)/?\',\'index.php?pagename=story&user=$matches[1]\',\'top\');
}
add_action( \'init\', \'my_custom_url\' );
之后,在需要用户id的页面中使用:
$userqv = get_query_var(\'user\');
$user = is_numerical( $userqv ) ? $userqv : get_user_id( $userqv );
这样
$user
变量将被设置为url后面的任何值(如果是数字),如果url中使用了非数字的内容,则将其视为用户名,并相应地获取用户id。