I'm developing a plugin that will set up a new custom post type (tournament) and which creates posts for this CPT using an API that gets called using WP Cron. The CPT has a custom field called season that I want to use in the permalink.
I have set up the permalink as follows:
http://local.wordpress.test/tournament/2019/my-tournament-name
tournament is the post-type
2019 is the season
my-tournament-name is the post_name
I created the permalink with the following code:
function rat_post_type_link( $link, $post, $leavename, $sample ) {
if ( $post->post_type == 'tournament' ){
$season = get_post_meta( $post->ID, 'rat-tournament-season', true);
return home_url( 'tournament/' . $season . '/' . $post->post_name );
} else {
return $link;
}
}
add_filter('post_type_link', 'rat_post_type_link', 10, 4);
Then I have added a rewrite rule to show the specific post
function rat_custom_post_type_rewrite_rules() {
add_rewrite_rule(
'tournament/[0-9]{4}/([^/]+)?$',
'?post_type=tournament&page_name=$matches[1]',
'top');
}
add_action('init', 'rat_custom_post_type_rewrite_rules');
I'm using flush_rewrite_rules()
in my plugin activator and can confirm this gets called. I installed Rewrite Analyzer to debug the rewriting rule.
I tested and confirmed that the link http://local.wordpress.test/?tournament=my-tournament-name is working.
I have included debug statements in the rat_custom_post_type_rewrite_rules()
function and they show up in the debug.log, so I know the function gets called.
My problem is that I can't find the rewrite rule in the list shown by Rewrite Analyzer. Any suggestions as to why this is?
Additional note: I haven't used add_rewrite_tag()
for the season because I don't need it on the querystring.