Basically I want to rewrite:
/edit/test-post
to an existing page with a parameter:
/edit?e=test-post
From the examples in the Codex I created:
add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp_loaded','my_flush_rules' );
// flush_rules() if our rules are not yet included
function my_flush_rules(){
$rules = get_option( 'rewrite_rules' );
if ( ! isset( $rules['(edit)/(d*)$'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
$newrules = array();
$newrules['(edit)/(d*)$'] = 'edit?&e=$matches[2]';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
array_push($vars, 'e');
return $vars;
}
However, I simply cannot get it working, what am I doing wrong?
Thanks!
By ‘existing page’ do you mean a WordPress page? My experience with rewrites is routing everything to index.php with whatever extra query vars you need, I think attempting to route it to
edit
is one of your issues, not entirely clear on your intent there.Go download Monkeyman Rewrite Analyzer if you don’t already have it, it’s a great tool for testing these things out.
I tested out the following rule to verify it works. All requests to
/edit/*
load a page named ‘edit’,get_query_var('e')
returns the correct value fore
in my template.Note I didn’t flush the rules here, I usually just visit the
Settings > Permalinks
page and click save to flush whenever I change them.