I’ve updated and added to the code you’ve provided.
Event post type:
- Changed post type name to from
Eventi
toeventi
. Post type names cannot contain capital letters - Changed
has_archive
toeventi
- Added rewrite arguments
Post type links
This configuration will result in the following URL structures:
Event post type archive URL:
/eventi
Event 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/
Here is the updated code. Remember to visit the Settings > Permalinks page in the admin area after updating the 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 );