Wordpress Rewrite Issue

时间:2015-03-26 作者:RyanMac

我为列出一系列社区项目的页面创建了一个自定义分类法,实际上是两个(一个标记和一个类别)。这是父URL:

website.com/community
如果你去这里,你会看到所有的项目。我已成功设置了查询变量,因此,如果输入,请说:

website.com/community/?stencil-tag=easter 

website.com/community/?stencil-type=build
一切正常。太完美了。现在,很自然,我正在尝试设置一些永久链接,这样用户就可以简单地进入

website.com/community/tag/easter
以及

website.com/commumity/type/build
分别为。我觉得这个问题可能与我试图在根(/社区)的子页面上重写的事实有关

无论如何,这是我的重写函数。我试过一些偏差,但我看不出有什么正确之处。我也记得要冲水。

add_action(\'init\',\'add_community_rewrite_rules\');
function add_community_rewrite_rules()
{
add_rewrite_rule(
    \'tag/(\\d*)$\',
    \'index.php?pagename=community&stencil-tag=$matches[1]\',
    \'top\'
);

add_rewrite_rule(
    \'type/(\\d*)$\',
    \'index.php?pagename=community&stencil-type=$matches[1]\',
    \'top\'
);
}
如果有人看到我在这方面的错误,并能为我指出正确的方向,我将不胜感激。谢谢

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

重写规则是错误的。例如,您想从community/tag/easter\'index.php?pagename=community&stencil-tag=easter\', 所以正则表达式应该包含community/tag/ 不仅如此tag/. 而且\\d 仅匹配数字,但标记值是字符串。同样适用于“重写模具”标记。你可以使用. 匹配任何字符,包括数字和字符串。

add_action(\'init\',\'add_community_rewrite_rules\');
function add_community_rewrite_rules() {
    add_rewrite_rule(
       \'^community/tag/(.*)$\',
       \'index.php?pagename=community&stencil-tag=$matches[1]\',
       \'top\'
    );

    add_rewrite_rule(
        \'^community/type/(.*)$\',
        \'index.php?pagename=community&stencil-type=$matches[1]\',
        \'top\'
    );
}
虽然这些重写规则可能是正确的,但我认为您应该使用另一种方法。使用WordPress为projects 岗位类型。如果需要特定的模板,请创建文件archive-projects.php 在主题文件夹中。你可以从projectscommunity 注册帖子类型时,如果希望该URL用于帖子类型存档:

add_action( \'init\', function() {

    $args = array(
      //Your args here
      \'rewrite\' => array( \'slug\' => \'community\' ),
    );
    register_post_type( \'projects\', $args );

} );
然后,在注册分类法时,还可以构建重写规则:

add_action( \'init\', function() {

    //Custom post type
    $args = array(
      //Your args here
      \'rewrite\' => array( \'slug\' => \'community\' ),
    );
    register_post_type( \'projects\', $args );

    //Custom taxonomies: stencil-tag
   $args = array(
      //Your args here
      \'rewrite\' => array( \'slug\' => \'community/tag\' ),
    );
    register_taxonomy( \'stencil-tag\', \'projects\', $args );

    //Custom taxonomies: stencil-tag
    $args = array(
      //Your args here
      \'rewrite\' => array( \'slug\' => \'community/type\' ),
    );
    register_taxonomy( \'stencil-type\', \'projects\', $args );

} );
现在,重写规则由WordPres自动处理,您无需呈现页面并在主查询中获取页面内的帖子时对其进行二次查询。

结束