在帖子名称slug之后将固定链接变量添加到自定义帖子类型URL

时间:2018-07-04 作者:Gavin

我有一个自定义的帖子类型mycpt 我试图允许在帖子名称slug之后的URL末尾追加一个变量,如下所示:

www.site.com/mycpt/the-name-of-my-post/var-value-here/
我一直在四处搜索,我能找到的唯一例子不是在URL中使用帖子名/slug,而是分类法,所以我不确定正确的方法是什么。下面是我现在尝试的内容,但它将带有变量的URL视为一个单独的页面类型(它加载的是一个默认模板,而不是自定义帖子类型使用的模板)。

add_action( \'init\', function() {
    add_rewrite_tag( \'%my_var%\', \'([^/]*)\' );
    add_rewrite_rule( \'^mycpt/(.*)/([^/]*)/?\', \'index.php?post_type=mycpt&my_var=$matches[1]\', \'top\' );
}, 10, 0 );
我也试着改变$matches[1]$matches[2] 因为我认为可能第一个匹配的是帖子名/slug的通配符,但这也不起作用。

有人知道我做错了什么吗?

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

下面是一个完整的工作示例,它添加了一个post类型,并使用额外的规则来捕获额外的参数:

function wpd_post_type_and_rule() {
    register_post_type( \'mycpt\',
        array(
            \'labels\' => array(
                \'name\' => __( \'mycpt\' ),
            ),
            \'public\' => true,
            \'rewrite\' => array( \'slug\' => \'mycpt\' ),
        )
    );
    add_rewrite_tag( \'%mycpt_var%\', \'([^/]*)\' );
    add_rewrite_rule(
        \'^mycpt/([^/]*)/([^/]*)/?$\',
        \'index.php?mycpt=$matches[1]&mycpt_var=$matches[2]\',
        \'top\'
    );
}
add_action( \'init\', \'wpd_post_type_and_rule\' );
添加此规则和刷新重写规则后,您将同时拥有

www.site.com/mycpt/the-name-of-my-post/
以及

www.site.com/mycpt/the-name-of-my-post/var-value-here/
您可以获得mycpt_var 在模板中使用:

echo get_query_var( \'mycpt_var\' );

SO网友:Alt C

作为临时解决方案,您可以尝试使用免费插件:https://wordpress.org/plugins/custom-post-type-permalinks/

结束