Generating Rewrite Rules for Custom Post Type
-
Hi,
I am developing for a website where I create some Custom Post Types and som Custom Taxonomies.
I am trying to modify the default WP URLs where the CPT slug is at the beginning.
Imagin my CPT is
book
.I want my URLs to change from example.com/book/great-book-title to example.com/fantasy/great-book-title (where fantasy is the slug of a term of a custom taxonomy).
There are two reasons for this:
- I have no archives page, so example.com/book/ is not used
- I use Polylang to make it multilingual, but “book” would be in all my URLs
What I did:
- I filter the CPT URL to match my structure
- I add rewrite rules on the top to capture my posts
The issue:
I created rewrite rules, but then I realised I was missing example.com/fantasy/great-book-title/feed or example.com/fantasy/great-book-title/trackback…I saw what WP was trying to create and I use this function to create the rewrite rules:
function cbm_create_all_rewrite_rules_versions($regex, $query_var, $match_num){ $second_match_num=$match_num + 1; /*Post itself*/ add_rewrite_rule('^' . $regex . '/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']', 'top'); /*Feeds*/ add_rewrite_rule('^' . $regex . '/feed/(feed|rdf|rss|rss2|atom)/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&feed=$matches['. $second_match_num . ']', 'top'); add_rewrite_rule('^' . $regex . '/(feed|rdf|rss|rss2|atom)/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&feed=$matches[' . $second_match_num . ']', 'top'); /*Embed*/ add_rewrite_rule('^' . $regex . '/embed/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&embed=true', 'top'); /*Trackback*/ add_rewrite_rule('^' . $regex . '/trackback/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&tb=1', 'top'); /*Paged*/ add_rewrite_rule('^' . $regex . '/page/?([0-9]{1,})/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&paged=$matches[' . $second_match_num . ']', 'top'); /*Comment-page*/ add_rewrite_rule('^' . $regex . '/comment-page-([0-9]{1,})/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&cpage=$matches[' . $second_match_num . ']', 'top'); /*Page*/ add_rewrite_rule('^' . $regex . '(?:/([0-9]+))?/?$','index.php?' . $query_var . '=$matches[' . $match_num . ']&page=$matches[' . $second_match_num . ']', 'top'); }
Is there a way to make WP generate all these possibilities?
- The topic ‘Generating Rewrite Rules for Custom Post Type’ is closed to new replies.