从URL中删除分类库或术语

时间:2011-06-26 作者:danstever

我知道这里有很多关于这个的帖子,但没有一个能回答我的问题。

我正在使用具有自定义类别类型(名为messagetypes)的自定义构建主题。我创建了一个名为media的类别。设置此主题是为了添加一个菜单项,单击该菜单项时,会显示所有标记为media的项目,但页面的URL则是mysite。com/消息类型/媒体。我想从url中删除消息类型,并将其仅用于mysite。com/媒体。

我得到的最接近的结果是当我添加到自定义类别函数页面时,其中

register_taxonomy( \'messagetypes\', ...
使用调用

\'rewrite\' => array( \'slug\' => \'\'),
当我这样做时,我从这个页面获得了所需的结果,但我的所有其他页面链接都断开了(使用永久链接)

我还尝试添加到重写数组

\'with_front\' => false
但这也没用。

任何帮助或见解都会很好。我在这件事上浪费了太多时间,快把我逼疯了。

谢谢

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

当我这样做时,我从这个页面获得了所需的结果,但我的所有其他页面链接都断开了(使用永久链接)

因为,很简单,WordPress对你要的页面没有任何线索。它在做你让它做的事;

对于所有看起来像http://example.com/X, 查找消息类型为的帖子X.

这就是为什么你需要“标识符”在那里;这样就可以区分对页面、档案、类别。。。

如果您真的想要这个功能,那么在重写映射的顶部添加详细的重写规则将是一个不错的选择;

add_rewrite_rule( \'media/?$\', \'index.php?messagetypes=media\', \'top\' );
如果您有很多消息类型,那么您可能希望连接到术语的创建和删除中,并动态更新&;刷新重写规则。

否则,请在functions.php, 然后刷新永久链接(只需访问管理中的永久链接选项页面)。

最后一件事,恢复register_taxonomy 调用“恢复正常”,即省略rewrite 参数,并使用term_link 在自定义permalink中交换过滤器;

function __custom_messagetypes_link( $link, $term, $taxonomy )
{
    if ( $taxonomy !== \'messagetypes\' )
        return $link;

    return str_replace( \'messagetypes/\', \'\', $link );
}
add_filter( \'term_link\', \'__custom_messagetypes_link\', 10, 3 );

结束

相关推荐

在初始化过程中从slug获取帖子ID

我正在尝试添加一个url重写规则,以查找任何连接到当前帖子的帖子(使用scribu发布的帖子2)。它被绑定到WP Query对象中,所以我所要做的就是传递另一个变量“connected”=>$post\\u id,它就会工作。这是我正在使用的规则,但我没有post\\u id作为url的一部分,因此我无法通过regex获得它。add_rewrite_rule(\"cleats/([^/]+)/news\", \"index.php?tag=\\$matches[1]\", \'top\');如果这能