Wordpress重写API,add_rewrite_rule问题


Wordpress rewrite API, add_rewrite_rule issue

我在本地机器中安装了wordpress:所以我的家是http://localhost/wordpress(尚未创建任何虚拟主机条目)

我创建了一个名为test的页面,page_id=19。现在我需要使用如下重写:

何时会有任何请求http://localhost/wordpress/group/abc,应将其转换为http://localhost/wordpress/?page_id=19&group=abc

我的.htaccess:

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

#结束WordPress

我尝试过的:

 add_action('init', function() {
     global $wp_rewrite; 
     $wp_rewrite->flush_rules();
     add_rewrite_rule('^group/([^/]+)', 'index.php?page_id=19&group=abc', 'top');
    add_rewrite_tag('%group%', '[A-Za-z]+');
 });

但每当我试图访问http://localhost/wordpress/group/abc我得到404错误。

请建议,我做错了什么吗。

提前谢谢。

经过大量的重新搜索发现:

  • 使用pagename而不是page_id总是安全的
  • 应该注册所使用的自定义查询变量(此处为组)
  • 还有一个名为rewrite_rules_array的过滤器

所以上面的代码可能看起来像(添加的页面名称是测试):

add_filter( 'query_vars', function($query_vars) {
   $query_vars[] = 'group';
   return $query_vars;
});
add_action('init', function() {
    global $wp_rewrite; 
    $wp_rewrite->flush_rules();
    add_rewrite_rule('group/(.*)', 'index.php?pagename=test&group=$matches[1]', 'top');
});

但是我们不能通过$_GET['group']访问组值。我们需要通过get_query_var('group') 访问它

添加重写规则的另一种方法:

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {   
    $newrules = array();
    $newrules[ 'group/(.*)/?$' ] = 'index.php?pagename=test&group=$matches[1]';
    return $newrules + $rules;
}