Wordpress URL使用add_rewrite_rule()或generate_rewrite_rules()重写自定义分类

时间:2014-07-30 21:38:09

标签: wordpress .htaccess mod-rewrite url-rewriting

我正试图修改我创建的网站的某些网址。阅读了两个(非常有用的)答案(12)后,我仍然有点不确定如何创建一个在其类别的层次结构中显示自定义帖子类型的URL(由自定义分类法。

从我的阅读中,我认为add_rewrite_rulegenerate_rewrite_rules似乎是最好的选择,但我似乎无法使其功能......就像......一样! 以下是我目前的网址结构

Base        = http://domain.com/bands
Category    = http://domain.com/band-type/acoustic-duos
Single Post = http://domain.com/bands/duo-1

这就是我要实现的目标

Base        = http://domain.com/bands
Category    = http://domain.com/bands/acoustic-duos
Single Post = http://domain.com/bands/acoustic-duos/duo-1

在上面的方案中, bands是自定义后期类型,而 band-type是我为其创建的自定义分类 '条带'。

从使用@ jan-fabry重写分析器插件,我可以看到自定义分类模式是band-type/([^/]+)/?$ add_rewrite_rule()的第一个参数,但我不知道Wordpress如何引用自定义分类法index.php URL变量,用于$redirect参数(例如index.php?tax=bands)...所以不出所料,下面的代码(放在functions.php中)根本不起作用:

wp_reset_query();
function sheixt_init()
{
add_rewrite_rule(
    'band-type/([^/]+)/?',
    'index.php?cat=&band-type=$matches[1]',
    'top' );
}
add_filter( 'query_vars', 'sheixt_query_vars' );
function sheixt_query_vars( $query_vars )
{
    $query_vars[] = 'band-type';
    return $query_vars;
}

我仍然觉得我没有理解这是如何工作的(根本没有!)并且阅读代码会使我更加困惑,所以我不确定如何使用generate_rewrite_rules()

最后,我想知道我是否愚弄永久链接冲突,因为我希望自定义分类法(波段类型)使用自定义后期类型的slug('band')作为基线网址。

请您指出我正确的方向,如有必要,我可以提供更多信息。感谢。

1 个答案:

答案 0 :(得分:0)

这一切都可以使用.htaccess文件完成。这假设.htacces文件位于根目录中,并且wordpress安装在根目录而不是子文件夹中。如果您在子文件夹中安装了wordpress,请将RewriteBase更改为:

RewriteBase http://domain.com/subfolder/

其中子文件夹是您安装wordpress的子目录。对于其他所有使用下面的代码,其中wordpress安装在根目录中。

# BEGIN WordPress

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

RewriteRule ^band-type/acoustic-duos/(.*)$ bands/acoustic-duos/$1 [QSA,L]
RewriteRule ^bands/(.*)$ bands/acoustic-duos/$1 [QSA,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

编辑.htaccess文件时要小心。在使用上面的代码进行编辑之前,请务必保存当前.htaccess的备份。我相信第一个RewriteRule应该可行。第二个RewriteRule可能导致重定向循环或您的站点崩溃,因为我们正在重定向两个URL:

/bands/duo-1 
/band-type/acoustic-duos 

有一个新基地:

/bands/acoustic-duos