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 have tried to apply the advice offered by TheDeadMedic in this post to achieve the following URL structure:

example.com/activities = a WP page
example.com/activities/type-term = a custom archive
example.com/activities/type-term/activity-post = a custom post

All URL's work until the lowest one which returns a Wordpress "not found" error.

I don't know whether I need to filter the rewrite rules to make this work. The post I linked above suggests that I have done everything needed.

Any help would be greatly appreciated, thanks. Here's my code:

 * Register custom content objects on initiation
add_action('init', 'register_type'); // Type taxonomy (activities)
add_action('init', 'register_activity'); // Activity post-type
add_filter('post_type_link', 'filter_activity_link', 10, 2); // Filter permalinks for activity post-type

 * Register Type custom taxonomy for activities
function register_type() {

    $labels = array(
        'name'                  => ('Types'),
        'singular_name'         => ('Type'),
        'add_new'               => ('Add New Type'),
        'add_new_item'          => ('Add New Type'),
        'edit_item'             => ('Edit Type'),
        'new_item'              => ('New Type'),
        'view_item'             => ('View Type'),
        'search_items'          => ('Search Type'),

    $args = array(
        'labels'                => $labels,
        'public'                => true,
        'query_var'             => true,
        'rewrite'               => array( 'slug' => 'activities', 'with_front' => false ),

    register_taxonomy( 'type', 'activity', $args );

 * Register Activity custom post-type
function register_activity() {

    $labels = array(
        'name'                  => ('Activities'),
        'singular_name'         => ('Activity'),
        'all_items'             => ('All Activities'),
        'add_new_item'          => ('Add New Activity'),
        'edit_item'             => ('Edit Activity'),
        'new_item'              => ('New Activity'),
        'view_item'             => ('View Activity'),
        'search_items'          => ('Search Activities')

    $args = array(
        'labels'                => $labels,
        'public'                => true,
        'show_in_nav_menus'     => false, // Do not appear directly in navigation
        'menu_position'         => 5,
        'hierarchical'          => false,
        'query_var'             => true,
        'supports'              => array( 'title', 'editor', 'type', 'revisions', 'comments' ),
        'rewrite'               => array( 'slug' => 'activities/%tax_type%', 'with_front' => false )

    register_post_type( 'activity', $args );

 * Update Type rewrite slug with applicable terms
function filter_activity_link($link, $post) {
    if ($post->post_type != 'activity')
    return $link;

if ($cats = get_the_terms($post->ID, 'type'))
    $link = str_replace('%tax_type%', array_pop($cats)->slug, $link);
return $link;


OK, it turns out you will always need to add rewrite rules to finish this process. The URL's may appear correctly but the database doesn't understand them. This post helped me enormously, along with this reference information on regex.

I just needed to add the code

add_rewrite_rule('^activities/([^/]*)/([^/]*)/?$' ,'index.php?activity=$matches[2]','top';

Hope this helps someone.

share|improve this question
up vote 1 down vote accepted

There's nothing in wordpress to automatically replace %tax_type% in the rewrite slug. You'd have to add some custom code to handle it like in this answer http://stackoverflow.com/questions/7723457/wordpress-custom-type-permalink-containing-taxonomy-slug

share|improve this answer
Isn't that covered by the post_type_link filter function at the bottom? – nigedo Mar 15 '12 at 21:27
The URL's are definitely working as they should be, it's just the posts aren't being found. I suspect I need to alter the rewrite rules somehow, but not sure how to code this. – nigedo Mar 16 '12 at 9:38
OK I worked this out eventually, with help from this post. I updated the question with my solution, for anyone else who needs it. – nigedo Mar 17 '12 at 9:35

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.