WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm developing a car site that has showrooms. Each showroom needs it's own custom URL based on it's location. The location (City and County/State) is already inserted as two custom fields. So for example, if it's "Showroom A", located in Liverpool, Merseyside, it's URL would be the following:-


I have a custom post type of "Showroom", that has it's rewrite rules set to false (though it was previously set to true earlier in the test). However when I create the post in question, there's an issue. The permalink is given as everything BAR the name of the showroom (i.e. http://www.domain.com/location/merseyside/liverpool/). Visting this URL causes a 404 error, and even adding "showroom-a" (for example) to the end of the code (http://www.domain.com/location/merseyside/liverpool/showroom-a/), also causes a 404 error. Here is my code.

function add_rewrite_rules()
    // Register custom rewrite rules

    global $wp_rewrite;

    $wp_rewrite->add_rewrite_tag('%showroom%', '([^/]+)', 'showroom=');
    $wp_rewrite->add_rewrite_tag('%post_custom_data%', '([^/]+)', 'post_custom_data=');
    $wp_rewrite->add_permastruct('showroom', 'location/%post_custom_data%', false);


function permalinks($permalink, $post, $leavename)
    $no_data = 'no-data';
    $post_id = $post->ID;

    if($post->post_type != 'showroom' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))

        return $permalink;

    $state = sanitize_title_with_dashes(get_post_meta($post_id, 'state', true));
    $city =  sanitize_title_with_dashes(get_post_meta($post_id, 'city', true));
    $data = $state . "/" . $city;


        $data = $no_data;

    $permalink = str_replace('%post_custom_data%', $data, $permalink);

    return $permalink;


add_action('init', 'add_rewrite_rules');
add_filter('post_type_link', 'permalinks', 10, 3);

Any ideas or help would be appreciated :)

share|improve this question
a couple of things you could try- separate your city and county/state into distinct rewrite tags, and specify the permastruct (with additional tags) as the rewrite argument of your post type registration rather than setting it to false – Milo Oct 3 '12 at 17:07
Cheers @Milo, I've done a bit of work and managed to fine a small issue. Basically, for some reason, $data = $state . "-" . $city works, but $data = $state . "/" . $city does not. Will keep playing... – Rhys Wynne Oct 4 '12 at 8:40

I managed to fix this.

Basically I changed the permastruct to this:

$wp_rewrite->add_permastruct('showroom', 'location/%state%/%city%/%showroom%', false);

I then grabbed state & city as two separate variables, replacing it in the permalink structure using these lines:

$permalink = str_replace('%state%', $state, $permalink);
$permalink = str_replace('%city%', $city, $permalink);

With $state & $city grabbed using get_post_meta from the post.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.