I've run into another wonderful 404 issue. I'm trying to have 2 seperate post types that share the same rewrite slug. I've flushed my rewrite rules, and when I test only 1 of the CPT works- the other gets a 404. My rewrite that I wish to use for both is:
'rewrite' => array('slug' => 'team/%teamtype%'),
Anyone know how to handle this?
add_action( 'init', 'create_rider_type' );
function create_rider_type() {
register_post_type('riders',
array(
'description' => 'rider custom post type',
'show_ui' => true,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/images/riders.png',
'exclude_from_search' => false,
'labels' => array(
'name' => 'Team Riders',
'singular_name' => 'Rider',
'add_new' => 'Add New rider',
'add_new_item' => 'Add New rider',
'edit' => 'Edit riders',
'edit_item' => 'Edit rider',
'new_item' => 'New rider',
'view' => 'View rider',
'view_item' => 'View rider',
'search_items' => 'Search riders',
'not_found' => 'No riders found',
'not_found_in_trash' => 'No riders found in Trash',
'parent' => 'Parent rider',
),
'hierarchical' => false,
'supports' => array('title','editor','excerpt', 'trackbacks','custom-fields', 'comments','revisions','thumbnail','author','page-attributes'),
'public' => true,
'rewrite' => array('slug' => 'team/%teamtype%'),
'taxonomies' => array('teamtype')
)
);
}
add_action( 'init', 'create_sponsor_type' );
function create_sponsor_type() {
register_post_type('sponsors',
array(
'description' => 'sponsor custom post type',
'show_ui' => true,
'menu_position' => 5,
'menu_icon' => get_stylesheet_directory_uri() . '/images/sponsors.png',
'exclude_from_search' => false,
'labels' => array(
'name' => 'Team sponsors',
'singular_name' => 'sponsor',
'add_new' => 'Add New sponsor',
'add_new_item' => 'Add New sponsor',
'edit' => 'Edit sponsors',
'edit_item' => 'Edit sponsor',
'new_item' => 'New sponsor',
'view' => 'View sponsor',
'view_item' => 'View sponsor',
'search_items' => 'Search sponsors',
'not_found' => 'No sponsors found',
'not_found_in_trash' => 'No sponsors found in Trash',
'parent' => 'Parent sponsor',
),
'hierarchical' => false,
'supports' => array('title','editor','excerpt', 'trackbacks','custom-fields', 'comments','revisions','thumbnail','author','page-attributes'),
'public' => true,
'rewrite' => array('slug' => 'team/%teamtype%'),
'taxonomies' => array('teamtype')
)
);
}
*************Update***********************************
The original CPT rewrite code I posted was simplified so I could get more straight to the point- however maybe it makes more sense if you can see how i'm handling those permalinks with my custom Taxonomy. I've updated the code to show.
I really wish to keep them as seperate post types- for organization as well as seperate metaboxes for each. Please check the updated rewrites for the CPT's, as well as my Taxonomy setup below:
add_action( 'init', 'create_team_taxonomies' );
function create_team_taxonomies() {
register_taxonomy(
'teamtype',
array('riders','sponsors'),
array(
'labels' => array(
'name' => 'Team Types',
'singular_name' => 'Team Type',
'search_items' => 'Search Team Types',
'popular_items' => 'Popular Team Types',
'all_items' => 'All Team Types',
'parent_item' => 'Parent Team Type',
'parent_item_colon' => 'Parent Team Type:',
'edit_item' => 'Edit Team Type',
'update_item' => 'Update Team Type',
'add_new_item' => 'Add New Team Type',
'new_item_name' => 'New Team Type Name'
),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'query_var' => 'teamtype',
'show_tagcloud' => true,
'rewrite' => array( 'slug' => 'team', 'with_front' => false)
)
);
}
And here is how I setup the rewrite when I select the Taxonomy, and publish the post:
add_filter('post_link', 'teamtypepermalink', 10, 3);
add_filter('post_type_link', 'teamtypepermalink', 10, 3);
function teamtypepermalink($permalink, $post_id, $leavename) {
if (strpos($permalink, '%teamtype%') === FALSE) return $permalink;
// Get post
$post = get_post($post_id);
if (!$post) return $permalink;
// Get taxonomy terms
$terms = wp_get_object_terms($post->ID, 'teamtype');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug;
else $taxonomy_slug = 'not-specified';
return str_replace('%teamtype%', $taxonomy_slug, $permalink);
}