编辑自定义URL中的变量

时间:2013-12-14 作者:user2950747

我有一个自定义主题中的现有页面,该页面需要以下格式的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\');

1 个回复
最合适的回答,由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。

结束

相关推荐

Subpages Permalinks Issues

我的网站看起来像:Page-1 (page.php)。。。Subpage-1 (custom-collection.php; 自定义帖子类型)。。。。。。Filtering Output-Post (custom-collection-single.php)当我使用打开过滤输出帖子时/%postname% 对于permalinks,我得到404错误页。一些代码:custom-collection.php<?php $args = array( \'post_type\' => \'weine\