acmstha
Forum Replies Created
-
Forum: Fixing WordPress
In reply to: custom post type subcategories 404 issueHi @shojikama,
I am working with some colleagues in WordCamp Kathmandu 2018. As a contributor, I am supposed to go through some issues on WordPress. Here I found your post on the issue of custom post type subcategories 404.
As far as I have understood your problem, I guess this might help you
Event post type:
————————————-
Changed post type name to from Eventi to eventi. Post type names cannot contain capital letters.
Changed has_archive to eventi
Added rewrite argumentsPost type links
———————————–
Added function to handle customized rewrite args Source 1, Source 2
This configuration will result in the following URL structures:Event post type archive URL:
—————————–
/eventiEvent post type URLs:
——————————-
/eventi/event-category-name/example-event-post-name/Event category URLs:
———————————–
/eventi/event-category-name/Event post type URLs when no event category has been set:
—————————————————————
/eventi/uncategorized/event-with-no-category/Below is the updated code. Remember to visit the Settings > Permalinks page in the admin area after updating the code.
Code:
//EVENTS // Register Custom Post Type function wpse239701_events_post_type() { $labels = array( 'name' => _x( 'Eventi', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Eventi', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Eventi', 'text_domain' ), 'name_admin_bar' => __( 'Eventi', 'text_domain' ), 'archives' => __( 'Item Archives', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), 'featured_image' => __( 'Featured Image', 'text_domain' ), 'set_featured_image' => __( 'Set featured image', 'text_domain' ), 'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), 'use_featured_image' => __( 'Use as featured image', 'text_domain' ), 'insert_into_item' => __( 'Insert into item', 'text_domain' ), 'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), 'items_list' => __( 'Items list', 'text_domain' ), 'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), 'filter_items_list' => __( 'Filter items list', 'text_domain' ), ); $args = array( 'label' => __( 'Eventi', 'text_domain' ), 'description' => __( 'Descrizione evento', 'text_domain' ), 'labels' => $labels, 'supports' => array('title', 'thumbnail', 'editor' ), 'taxonomies' => array('events_categories'), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => 'eventi', 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', 'rewrite' => array( 'slug' => 'eventi/%events_categories%', 'with_front' => false ), ); register_post_type( 'eventi', $args ); } add_action( 'init', 'wpse239701_events_post_type' ); function wpse239701_events_taxonomy() { register_taxonomy( 'events_categories', 'eventi', array( 'hierarchical' => true, 'label' => 'Categorie', 'query_var' => true, 'rewrite' => array( 'slug' => 'eventi', 'with_front' => false ) ) ); } add_action( 'init', 'wpse239701_events_taxonomy' ); function wpse239701_events_post_link( $permalink, $post_id, $leavename ) { if ( strpos( $permalink, '%events_categories%' ) === false ) { return $permalink; } // Get post $post = get_post($post_id); if ( ! $post ) { return $permalink; } // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'events_categories'); if ( ! is_wp_error( $terms ) && ! empty( $terms ) && is_object( $terms[0] ) ) { $taxonomy_slug = $terms[0]->slug; } else { $taxonomy_slug = 'uncategorized'; } return str_replace( '%events_categories%', $taxonomy_slug, $permalink ); } // add_filter( 'post_link', 'wpse239701_events_post_link', 10, 3 ); // Not needed - we aren't adding our custom taxonomy to posts, but if we were, this would be used. add_filter( 'post_type_link', 'wpse239701_events_post_link', 10, 3 );
You can go through the source link as well:
https://wordpress.stackexchange.com/questions/239701/custom-post-type-categories-gives-404-error