The generate_rewrite_rules WordPress PHP action fires after the rewrite rules are generated, allowing you to modify the rewrite rules.
Usage
add_action('generate_rewrite_rules', 'your_custom_function'); function your_custom_function($wp_rewrite) { // your custom code here }
Parameters
- $wp_rewrite (WP_Rewrite): The current WP_Rewrite instance (passed by reference).
More information
See WordPress Developer Resources: generate_rewrite_rules
Examples
Add Custom Rewrite Rule
Add a custom rewrite rule for a custom post type called “product”.
add_action('generate_rewrite_rules', 'add_product_rewrite_rule'); function add_product_rewrite_rule($wp_rewrite) { $new_rules = array( 'product/([^/]+)/?$' => 'index.php?post_type=product&name=$matches[1]' ); $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; }
Remove a Rewrite Rule
Remove a rewrite rule for the “author” base.
add_action('generate_rewrite_rules', 'remove_author_rewrite_rule'); function remove_author_rewrite_rule($wp_rewrite) { unset($wp_rewrite->rules['author/([^/]+)/?$']); }
Modify Existing Rewrite Rule
Modify the existing rewrite rule for “category”.
add_action('generate_rewrite_rules', 'modify_category_rewrite_rule'); function modify_category_rewrite_rule($wp_rewrite) { $wp_rewrite->rules['category/([^/]+)/?$'] = 'index.php?category_name=$matches[1]&custom_var=value'; }
Change Pagination Base
Change the pagination base from “page” to “browse”.
add_action('generate_rewrite_rules', 'change_pagination_base'); function change_pagination_base($wp_rewrite) { $wp_rewrite->pagination_base = 'browse'; }
Add Endpoint to Rewrite Rules
Add a custom endpoint called “json” to the rewrite rules.
add_action('generate_rewrite_rules', 'add_json_endpoint'); function add_json_endpoint($wp_rewrite) { $wp_rewrite->add_endpoint('json', EP_PERMALINK | EP_PAGES); }