I’ve been trying to rewrite a shop uri, and what I have now is this code:
add_filter('rewrite_rules_array','wp_insertMyRewriteRules');
add_filter('query_vars','wp_insertMyRewriteQueryVars');
add_filter('wp_loaded','flushRules');
// Remember to flush_rules() when adding rules
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function wp_insertMyRewriteRules($rules) {
$newrules = array();
$newrules['shop/brand/(brand)/?$'] = 'shop.php?brand=$matches[1]' ;
//$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
return $newrules + $rules ;
}
// Adding the bid var so that WP recognizes it
function wp_insertMyRewriteQueryVars($vars) {
array_push($vars, 'brand');
return $vars;
}
but no matter what I do I can’t get this to work.
I’m using Monkeyman Rewrite Analyzer plugin to view the active ap rewrites and what it tells me is that brand “is not public and will not be saved”. Also, it changes my shop.php to shop_php…
shop/brand/(brand)/?$ shop_php?brand: (brand)
Why is this such a mess? I tried to modify .htaccess as little as possible; also, since I want this to be in the theme.
So, first off, never flush rewrite rules on every page load. Better to do it on plugin activation one time.
Step 1: add the rewrite rule:
Step 2: add the query var
Then flush on plugin activation (because something like this should probably be in a plugin file).
Then on the front end you can do something like this:
Maybe a better strategy would be to rewrite brand to a specific page? Or maybe brand could be some sort of custom taxonomy?
You’ll have to test the above code, it was off the top of my head, but it should work or at least get you started
thanks for the lengthy reply. The thing is, im not making a plugin here, im just trying to interact with one.
its a shop plugin [theCartPress], and i made my own design all around it, and made a shop.php page for a custom post type of that kind [tcp_product].
i do get all posts of that post type rerouted to the right file, but i also want to be able to display them by brand. i have some _GET in it so i can do ?brand=mybrand, but i want to use the wordpress permalinks. i actually do have a custom taxonomy for it. That’s what i use after my GET:
sorry to mods for using the answer post, but the comment reformatting is impossible..
the top answer works, but there is a more proper and official way of doing these types of rewrites…
for example the following code will register your custom query variable and register your rewrite rule from the same action:
the final step of flushing the permalinks can be manually done from the WP admin instead of doing it by code by going to
settings/permalinks
and pressing onsave changes
.add_rewrite_tags / add_rewrite_rule