The infamous 404 Error (Not Found) raised on WordPress custom post types is due to the clash between your permalink structure and the rewrite
parameter specified in the register_post_type()
function. For example, if you have a permalink structure like /%year%/%monthnum%/%postname%/
and you specify the slug
parameter, then WordPress will rewrite your custom post type URL as sitename.ext/post-type/post-name
. This will lead to the 404 Error, because the two permalink structures don't match. Fortunately, there's a solution.
Suppose that you've created a portfolios
custom post type:
function portfolios_custom_init() { $labels = array( 'name' => _x('Portfolios', 'post type general name'), 'singular_name' => _x('Portfolio', 'post type singular name'), 'add_new' => _x('Add New', 'Portfolio'), 'add_new_item' => __('Add New Portfolio'), 'edit_item' => __('Edit Portfolio'), 'new_item' => __('New Portfolio'), 'all_items' => __('All Portfolios'), 'view_item' => __('View Portfolio'), 'search_items' => __('Search Portfolios'), 'not_found' => __('No Portfolios found'), 'not_found_in_trash' => __('No Portfolios found in Trash'), 'parent_item_colon' => '', 'menu_name' => __('Portfolios') ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array('slug'=>'portfolios'), 'capability_type' => 'post', 'has_archive' => true, 'hierarchical' => false, 'menu_position' => 100, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt') ); register_post_type('portfolios',$args); } add_action( 'init', 'portfolios_custom_init' );
The permalink generated will be sitename.ext/portfolios/portfolio
. If your permalink structure doesn't match the custom post type permalink structure, do the following:
- Go to Settings → Permalinks and change your current structure to
/%category%/%postname%
. - Save changes.
- Restore your original permalink settings.
- Save changes.
Now your custom post type permalink structure won't generate the 404 Error anymore.