固定链接:分类标签的自定义结构?

时间:2012-06-26 作者:mathiregister

在我的Wordpress永久链接设置中,我设置了Tag-Base 至“”。所以/tag/whatever 是我的标记页的当前url结构。

但是我有一个custom-post-type 使用custom-taxonomy 也就是说rewrite_slug.

register_taxonomy(
        \'event_tags\',
        \'wr_event\',
        array(
            \'label\' => \'Tags\',
            \'singular_label\' => \'Tag\',
            \'hierarchical\' => false,
            \'query_var\' => true,
            \'rewrite\' => array(\'slug\' => \'tag\'),
        )
    );
这意味着(普通帖子的标签和自定义帖子类型的标签)的标签应该具有相同的永久链接结构。

但是,这不起作用。当我设置rewrite-对于我的自定义分类法,也可以使用“标记”,博客帖子的普通标记存档会抛出404。

我知道,只要对这两种帖子类型使用两种不同的重写基础,就可以轻松解决这个问题。然而,我想知道是否有可能使这项工作以及。因此,blogpost的普通标记和我的自定义post类型的标记具有相同的重写结构。

有什么想法吗?

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

如果您连接到“rewrite\\u rules\\u array”过滤器,在$rules上执行print\\r,您将看到巨大的preg-match键值对。

add_filter( \'rewrite_rules_array\',\'mess_with_rewrite_rules\' );
function mess_with_rewrite_rules( $rules ) {
        print_pre($rules);
    return $rules;
}
查看规则在堆栈中的位置。WordPress在这个列表中循环查找与键匹配的任何内容,这些键是regex模式,并通过preg\\u match()将捕获的值应用到关联的值。我不确定,但我怀疑在第一场比赛中,它会停止寻找。因此,如果标记处于post\\u标记意义,它将停止查找。这可能就是为什么它没有达到你的目的。

如果我错了,那就意味着WordPress没有停止寻找,但我怀疑情况是否如此。由于标记在post\\u标记分类法中不存在,因此它返回404。尝试在post\\u标签中设置一个具有相同slug的术语,看看您是否最终使用该术语。

我认为没有办法按你的要求去做。WordPress可以通过URI知道您在寻找什么的唯一方法是永久链接的模式。如果你有两个模式相同的东西,那么就没有信息来区分这两个。

Solution A: 改用层次分类法。将标记转换为可以容纳两组术语的层次分类法。我怀疑主要的问题是用户界面。通过使post\\U标记具有层次结构,元框将切换到类别样式复选框列表。如果要维护非层次标记结构,可能需要创建一个自定义元盒,以仅包含“event\\u tags”的子级,并为其他所有子级创建另一个元盒。

Solution B:更改“event\\u tags”模式。例如,您可以使用/tag/events/。然后插入一个特殊的图案/tag/events/(.+?)$%i. 通过将其插入重写规则数组的顶部,它将首先匹配并停止查找。然后可以将匹配的术语应用于index.php?taxonomy=event_tags&term_slug=$matches[1] 这是可行的,但它会破坏任何slug碰巧是“events”的post\\u标记。

注意:我不知道term\\u slug是否是正确的查询变量,我只是在猜测。通过查看“重写规则”数组,并找到自定义分类法的其他用法的示例,可以了解这一点。

结束

相关推荐

将文本从ThickBox添加到metabox输入文本字段

我有一个自定义的帖子类型,其中有一个元框文本输入区域,当从模式窗口单击链接时,我想从thickbox中插入一个短代码。现在使用下面的代码,单击“插入”按钮时,它只会关闭模式窗口。请告诉我哪里出了问题。我的厚盒子开得很好。呈现的页面具有如下链接:echo \'<td><a href=\"#\" style=\"display:block\" class=\"button insertdownload\" id=\"download-\'.$d->id.\'\">Insert&l