flush_rewrite_rules( bool $hard = true )
Remove rewrite rules and then recreate rewrite rules.
Description Description
Parameters Parameters
- $hard
-
(bool) (Optional) Whether to update .htaccess (hard flush) or just update rewrite_rules transient (soft flush). Default is true (hard).
Default value: true
Source Source
File: wp-includes/rewrite.php
function flush_rewrite_rules( $hard = true ) {
global $wp_rewrite;
if ( is_callable( array( $wp_rewrite, 'flush_rules' ) ) ) {
$wp_rewrite->flush_rules( $hard );
}
}
Expand full source code Collapse full source code View on Trac
Changelog Changelog
| Version | Description |
|---|---|
| 3.0.0 | Introduced. |
User Contributed Notes User Contributed Notes
You must log in before being able to contribute a note or feedback.
If you want to flush rules while updating posts based on post type:
function wpdoc_flush_rules_on_save_posts( $post_id ) { // Check the correct post type. // Example to check, if the post type isn't 'post' then don't flush, just return. if ( ! empty( $_POST['post_type'] && $_POST['post_type'] != 'post' ) { return; } flush_rewrite_rules(); } add_action( 'save_post', 'wpdoc_flush_rules_on_save_posts', 20, 2);Expand full source codeCollapse full source code
register_activation_hook( __FILE__, 'plugin_activation' ); function plugin_activation() { update_option('plugin_permalinks_flushed', 0); } add_action( 'init', 'custom_query_vars' ); function custom_query_vars() { global $wp; $wp->add_query_var( 'newfeed' ); add_rewrite_rule( '^newfeed/([^/]*)/?', 'index.php?newfeed=$matches[1]', 'top' ); if( !get_option('plugin_permalinks_flushed') ) { flush_rewrite_rules(false); update_option('plugin_permalinks_flushed', 1); } }Expand full source codeCollapse full source code
This is how you would flush rules on theme activation:
If you’re developing a theme, while building it you can use this snippet of code that will flush rewrite rules when the file containing it is changed, or every 48 hours:
// do not use on live/production servers add_action( 'init','maybe_rewrite_rules' ); /** * Flush rewrite rules if the current file has changed and at least every 48 hours. */ function maybe_rewrite_rules() { if ( ! is_admin() ) { return; } $ver = filemtime( __FILE__ ); // Get the file time for this file as the version number $defaults = array( 'version' => 0, 'time' => time() ); $r = wp_parse_args( get_option( __CLASS__ . '_flush', array() ), $defaults ); if ( $r['version'] != $ver || $r['time'] + 172800 < time() ) { // Flush if ver changes or if 48hrs has passed. flush_rewrite_rules(); // trace( 'flushed' ); $args = array( 'version' => $ver, 'time' => time() ); if ( ! update_option( __CLASS__ . '_flush', $args ) ) add_option( __CLASS__ . '_flush', $args ); } }Expand full source codeCollapse full source code
Feedback
“Flushing” the rewrite rules should only happen in wp-admin, see https://core.trac.wordpress.org/ticket/44142. It is possible to do from the front-end while developing a theme or a plugin, but is a pretty bad idea if ever done in production.In that terms I’d add:
if ( ! is_admin() ) { return; }at the top of the above function. — By Andrew Ozz —This is how you would flush rewrite rules when a plugin is activated or deactivated:
register_deactivation_hook( __FILE__, 'flush_rewrite_rules' ); register_activation_hook( __FILE__, 'wdocs_flush_rewrites' ); /** * Flush rewrite rules on activation */ function wpdocs_flush_rewrites() { // call your CPT registration function here (it should also be hooked into 'init') wpdocs_custom_post_types_registration(); flush_rewrite_rules(); }Expand full source codeCollapse full source code
// flush rules and serve new rules instantly without page refresh add_action('init', function() { flush_rewrite_rules(); }); // Or, hook into wp tag, flush rules and do an internal refresh add_action('wp', function() { if( "1" !== get_option("my_rules_have_been_flushed") ) { flush_rewrite_rules(); update_option('my_rules_have_been_flushed', '1'); // now, redirect the request. wp_redirect( $_SERVER['REQUEST_URI'] ); exit; } });Expand full source codeCollapse full source code