admin管理员组文章数量:1330677
I have a custom post type mycpt
and I'm trying to allow for a variable to be appended onto the end of the URL right after the post name slug, like this:
www.site/mycpt/the-name-of-my-post/var-value-here/
I've been searching around, and the only examples I can find don't use the post name/slug in the URL, but rather taxonomies, so I'm not sure what the correct way to do it is. Here is what I'm trying now, but it's treating the URL with the variable as a separate page type (it's loading a default template rather than the template my custom post type uses).
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 );
I also tried changing $matches[1]
to $matches[2]
since I thought maybe the wildcard for the post name/slug was the first match, but that didn't work either.
Can anybody see what I'm doing wrong here?
I have a custom post type mycpt
and I'm trying to allow for a variable to be appended onto the end of the URL right after the post name slug, like this:
www.site/mycpt/the-name-of-my-post/var-value-here/
I've been searching around, and the only examples I can find don't use the post name/slug in the URL, but rather taxonomies, so I'm not sure what the correct way to do it is. Here is what I'm trying now, but it's treating the URL with the variable as a separate page type (it's loading a default template rather than the template my custom post type uses).
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 );
I also tried changing $matches[1]
to $matches[2]
since I thought maybe the wildcard for the post name/slug was the first match, but that didn't work either.
Can anybody see what I'm doing wrong here?
Share Improve this question asked Jul 4, 2018 at 18:19 GavinGavin 4247 silver badges21 bronze badges 4 |2 Answers
Reset to default 5Here's a complete working example that adds a post type, with extra rule to capture an additional parameter:
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' );
After adding this and flushing rewrite rules, you'll have both
www.site/mycpt/the-name-of-my-post/
and
www.site/mycpt/the-name-of-my-post/var-value-here/
You can get the value of mycpt_var
in the template with:
echo get_query_var( 'mycpt_var' );
As a temporary solution you can try using free plugin : https://wordpress/plugins/custom-post-type-permalinks/
本文标签: Add a permalink variable onto custom post type URL after post name slug
版权声明:本文标题:Add a permalink variable onto custom post type URL after post name slug 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742242415a2438916.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
my_var
in your rewrite rule. – Milo Commented Jul 4, 2018 at 19:50&p=xxx
url parameter? I figured WordPress automatically added that, since none of the examples I found added that parameter. – Gavin Commented Jul 4, 2018 at 19:51p
, it's whatever your post type slug is,mycpt
in your example. Rewrite rules need to set all the necessary query vars to result in a successful main query. – Milo Commented Jul 4, 2018 at 19:54add_rewrite_endpoint
and having a variable name in the permalink structure. – Gavin Commented Jul 6, 2018 at 18:38