Showing posts with label Adding custom rewrite rules to WordPress. Show all posts
Showing posts with label Adding custom rewrite rules to WordPress. Show all posts

Friday, October 18, 2013

Adding custom rewrite rules to WordPress

My WordPress site has a portfolio that is at www.mysite.com/portfolio/. The portfolio sections & items are administered through a custom plugin I created. I want to access the individual items like www.mysite.com/portfolio/my-cool-photo & have that put “my-cool-photo” into a query string like ?portfolio_item=my-cool-photo so I can read it from my code.

In the plugins activation PHP file I have this code:

function add_rewrite_rules($wp_rewrite) {    $new_rules = array(        'portfolio/(.+)/?$' => 'index.php?&portfolio_item=$1'    );    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;}add_action('generate_rewrite_rules', 'add_rewrite_rules');function query_vars($public_query_vars) {    $public_query_vars[] = "portfolio_item";    return $public_query_vars;}add_filter('query_vars', 'query_vars');

This adds the rewrite rule to the array OK. The problem is it’s not doing anything. When I go to www.mysite.com/portfolio/testing/ I obtain the “This is somewhat embarrassing, isn’t it?” WordPress 404 error page. Obviously the redirect isn’t working, so the query string won’t be filled, yet just to make sure I did this:

global $wp_query, $wp_rewrite;if ($wp_rewrite->using_permalinks()) {    $searchKey = $wp_query->query_vars['portfolio_item'];} else {    $searchKey = $_GET['portfolio_item'];}

…and sure enough the query string isn’t getting passed.

Is there something I’m missing?

After you update the WordPress rewrite rules, you need to flush them:

http://codex.wordpress.org/Function_Reference/flush_rewrite_rules

You can select to flush with the $hard parameter true, & then you should be able to see your rewrite rules in the .htaccess file.