[wp-hackers] Best practice way for a plugin to use WP_Rewrite

Tuna Can tunamaxx at yahoo.com
Fri Nov 13 03:38:45 UTC 2009

Honestly, I would be ecstatic to be proven wrong on this. Do you have any idea why using a plugin with only the following code (plus the required plugin header of course):

function my_flush_rewrites() {
	global $wp_rewrite;

function my_add_rewrites() {
	global $wp_rewrite;
	$my_new_non_wp_rules = array(
		'this/([0-9]+)$' => 'that/index.php?a=$1',
	$wp_rewrite->non_wp_rules = $my_new_non_wp_rules + $wp_rewrite->non_wp_rules;

add_action( 'generate_rewrite_rules', 'my_add_rewrites' );
add_action( 'admin_init', 'my_flush_rewrites' );

...will automatically write the following in .htaccess:

RewriteRule ^this/([0-9]+)$ /that/index.php?a=$1 [QSA,L]

...but, if I set the .htaccess back to the WP default, then change the 'admin_init' to just 'init' like so:

add_action( 'init', 'my_flush_rewrites' );

...the changes aren't written to .htaccess unless I go to Settings / Permalinks and "Save Changes" manually?

HOWEVER, while I have had a little light at the end of the tunnel with this issue, my real question is whether it is possible to to flush_rules() via a THEME OPTIONS PAGE form submission. Since even discovering the 'admin_init' thing earlier today, I can't cause the changes to be made to .htaccess via my theme options page.

Any guidance would be GREATLY appreciated.

Thanks you,


--- On Thu, 11/12/09, Matt Jacob <matt at mattjacob.com> wrote:

> From: Matt Jacob <matt at mattjacob.com>
> Subject: Re: [wp-hackers] Best practice way for a plugin to use WP_Rewrite
> To: wp-hackers at lists.automattic.com
> Received: Thursday, November 12, 2009, 4:25 PM
> On Thu, Nov 12, 2009 at 12:23 PM,
> Tuna Can <tunamaxx at yahoo.com>
> wrote:
> > A little perseverance paid off...  My whole issue
> relates to trying to hook in the flush_rules() at 'init'
> instead of 'admin-init' as required.
> I don't think that's entirely true. On plugin activation,
> I'm doing this:
> add_action('init', array($this, 'FlushRewriteRules'));
> Every time the plugin is loaded, I'm doing this:
> add_filter('rewrite_rules_array', array($this,
> 'InsertRewriteRules'));
> Seems to work pretty well for me. Maybe you were running
> into a
> problem somewhere else?
> Matt
> _______________________________________________
> wp-hackers mailing list
> wp-hackers at lists.automattic.com
> http://lists.automattic.com/mailman/listinfo/wp-hackers

Be smarter than spam. See how smart SpamGuard is at giving junk email the boot with the All-new Yahoo! Mail.  Click on Options in Mail and switch to New Mail today or register for free at http://mail.yahoo..ca

More information about the wp-hackers mailing list