为什么ADD_REWRITE_RULE刷新和松散URL变量

时间:2013-04-08 作者:dan

我正在使用:

add_action( \'init\', \'add_author_rules\' );  
function add_author_rules() {   
    add_rewrite_rule(  
        "support/([^/]+)/?", "index.php?category=$matches[1]", "top");   
} 
themes/function.php

当我输入地址时:

http://localhost/support/funding
url更改为:

http://localhost
未设置变量:

print_r($_GET);
$category = get_query_var(\'category\');
echo \'!\'.$category.\'!\';
两者都给出空结果

这个.htaccess 未更改,为:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
如果我不清楚,我想:

/support/funding 留在地址栏中,我可以访问可变类别,在这种情况下,这将是“资金”

1 个回复
SO网友:Milo

首先,始终以debugging enabled 这样您就可以看到错误。这将揭示第一个问题:Undefined variable: matches. 你的规则应该用单引号引起来,这样它就可以作为字符串和$matches 变量未展开。

第二个问题是没有category query var,如果您试图设置默认WordPress类别,则应为category_name.

这是在2012年主题中测试和使用的:

add_action( \'init\', \'add_author_rules\' );  
function add_author_rules() {   
    add_rewrite_rule(  
        \'support/([^/]+)/?\', \'index.php?category_name=$matches[1]\', \'top\'
    );   
}
请注意,您不会看到对的任何更改。htaccess,因为这是内部重写。

如果category 是您自己的自定义查询变量,您需要向WordPress注册查询变量,以便它知道它们,尽管我不建议只使用category.

add_filter( \'query_vars\', \'wpa_query_vars\' );
function wpa_query_vars($query_vars){
    $query_vars[] = \'wpa_category\';
    return $query_vars;
}

结束

相关推荐