Milo’s advice set Mansur Khan in the right direction:
In your
rewrite_rules_array
filter you can look at$rules
and see
everything you’d need to duplicate. There are a lot of them- single
posts, author archives, date archives, taxonomy archives, post
formats, attachments, plus pagination and feeds for all of them.
The updated, working code:
add_filter( 'rewrite_rules_array', 'my_insert_rewrite_rules' ); add_filter( 'query_vars', 'my_insert_query_vars' ); add_action( 'init', 'my_flush_rules' ); // flush_rules() if our rules are not yet included function my_flush_rules() { $rules = get_option( 'rewrite_rules' ); if ( ! isset( $rules['fr(\/(.*))?$'] ) ) { global $wp_rewrite; $wp_rewrite->flush_rules(); } } // Adding a new rule function my_insert_rewrite_rules( $rules ) { $newrules = array(); foreach( $rules as $k => $r ) { $newrules['fr/'.$k] = $r; } $newrules['fr/?'] = '/index.php'; return $newrules + $rules; } // Adding the id var so that WP recognizes it function my_insert_query_vars( $vars ) { array_push( $vars, 'id' ); return $vars; }