Need help with friendly URL’s in WordPress

I don’t know (or didn’t know) much about the rewrite rules myself (but it seems nobody does), but based on some other answers here, I got this to work. We add a new rewrite rule that matches designers/designer_name/. We “flush” the rewrite rules so they get saved to the database, but make sure to do this only once, since it is an expensive operation. Now, we set up a pattern that will match our page and save the extra part in the designer_name query variable. Since WordPress does not know it must look at this variable, we hook into the query_vars filter and tell it to look at that too.

Now, in the page-designers.php theme file, we can do get_query_var('designer_name') and it will give you the designer name. If you want extra stuff like paging (designer/designer_name/page/2), you need to add an extra rewrite rule for that (or feeds, or whatever that starts with designer/designer_name). But the basic stuff should work.

<?php
/*
Plugin Name: WPA 3537
Plugin URI: http://wordpress.stackexchange.com/questions/3537/need-help-with-friendly-urls-in-wordpress
Description: Need help with friendly URL's in WordPress
Version: 1.0
Author: Jan Fabry
*/

register_activation_hook(__FILE__, 'wpa3537_flush_rules');
function wpa3537_flush_rules()
{
    add_rewrite_rule('designers/([^/]+)', 'index.php?pagename=designers&designer_name=$matches[1]', 'top');
    flush_rewrite_rules(false);
}

add_filter('query_vars', 'wpa3537_query_vars');
function wpa3537_query_vars($query_vars)
{
    $query_vars[] = 'designer_name';
    return $query_vars;
}

Leave a Comment