I created a custom post_type called Events, where I can show the Events(URL:HTTP://localhost/events
) that are load by the archive-events.php that I created.
Now I have created a custom taxonomy called counties that I want to use to filter Events by the county in which they are located. I'm able to apply counties to specific Events, but I have no idea how to show them. I have tried to create a taxonomy-counties.php
But I have no idea how to test it or debug it since if I try to go to HTTP://localhost/events/county
or HTTP://localhost/county
it takes me to a '404 Page Not Found'.
This is the code that I used to create the taxonomy:
add_action('init', 'create_counties_hierarchical_taxonomy', 0);
function create_counties_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'Counties', 'taxonomy general name' ),
'singular_name' => _x( 'County', 'taxonomy singular name' ),
'search_items' => __( 'Search Counties' ),
'all_items' => __( 'All Counties' ),
'parent_item' => __( 'Parent County' ),
'parent_item_colon' => __( 'Parent County:' ),
'edit_item' => __( 'Edit County' ),
'update_item' => __( 'Update County' ),
'add_new_item' => __( 'Add New County' ),
'new_item_name' => __( 'New County Name' ),
'menu_name' => __( 'Counties' ),
);
// Register Taxonomy
register_taxonomy('counties',array('events'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'county' ),
));
}
I have tried going through the WordPress developer documentation but unfortunately haven't been able to understand this and found an answer.
Thanks!
I created a custom post_type called Events, where I can show the Events(URL:HTTP://localhost/events
) that are load by the archive-events.php that I created.
Now I have created a custom taxonomy called counties that I want to use to filter Events by the county in which they are located. I'm able to apply counties to specific Events, but I have no idea how to show them. I have tried to create a taxonomy-counties.php
But I have no idea how to test it or debug it since if I try to go to HTTP://localhost/events/county
or HTTP://localhost/county
it takes me to a '404 Page Not Found'.
This is the code that I used to create the taxonomy:
add_action('init', 'create_counties_hierarchical_taxonomy', 0);
function create_counties_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'Counties', 'taxonomy general name' ),
'singular_name' => _x( 'County', 'taxonomy singular name' ),
'search_items' => __( 'Search Counties' ),
'all_items' => __( 'All Counties' ),
'parent_item' => __( 'Parent County' ),
'parent_item_colon' => __( 'Parent County:' ),
'edit_item' => __( 'Edit County' ),
'update_item' => __( 'Update County' ),
'add_new_item' => __( 'Add New County' ),
'new_item_name' => __( 'New County Name' ),
'menu_name' => __( 'Counties' ),
);
// Register Taxonomy
register_taxonomy('counties',array('events'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'county' ),
));
}
I have tried going through the WordPress developer documentation but unfortunately haven't been able to understand this and found an answer.
Thanks!
Share Improve this question asked Aug 25, 2020 at 18:20 Tincho NTincho N 133 bronze badges 3- What you want to show? Do you want to show list of counties and after that it will list of events associate with that? – Pradipta Sarkar Commented Aug 25, 2020 at 18:34
- Yeah, my idea was for the user to be able to select a county and to display all the Events in that county – Tincho N Commented Aug 25, 2020 at 18:46
- To display counties in a template you need to use get_terms() of WP and by iterating the each county/terms you can get specific county URL by calling get_term_link() function of WP. – Pradipta Sarkar Commented Aug 25, 2020 at 19:25
1 Answer
Reset to default 0Ok, i did work for you:
First, I registered custom post type and taxonomy:
add_action('init', 'my_init');
add_action('admin_init', 'my_admin_init');
function my_admin_init() {
$role = get_role( 'administrator' );
$role->add_cap( 'edit_event' );
$role->add_cap( 'read_event' );
$role->add_cap( 'delete_event' );
$role->add_cap( 'edit_events' );
$role->add_cap( 'read_events' );
$role->add_cap( 'delete_events' );
$role->add_cap( 'edit_others_events' );
$role->add_cap( 'publish_events' );
$role->add_cap( 'read_private_events' );
$role->add_cap( 'delete_private_events' );
$role->add_cap( 'delete_published_events' );
$role->add_cap( 'edit_private_events' );
$role->add_cap( 'edit_published_events' );
$role->add_cap( 'create_events' );
$role->add_cap( 'delete_others_events' );
$role->add_cap( 'delete_others_event' );
}
function my_init() {
global $post;
$labels = array(
'name' => __( 'event', 'webto' ),
'singular_name' => __( 'Header component', 'webto' ),
'menu_name' => __( 'Event', 'webto' ),
'parent_item_colon' => __( 'Parental:', 'webto' ),
'all_items' => __( 'event', 'webto' ),
'view_item' => __( 'View', 'webto' ),
'add_new_item' => __( 'Add new event', 'webto' ),
'add_new' => __( 'Add new', 'webto' ),
'edit_item' => __( 'Edit event', 'webto' ),
'update_item' => __( 'Update event ', 'webto' ),
'search_items' => __( 'Find event', 'webto' ),
'not_found' => __( 'Not found', 'webto' ),
'not_found_in_trash' => __( 'Not found in the bin', 'webto' ),
);
$args = array(
'labels' => $labels,
'supports' => array('title'),
'public' => false,
'publicly_queryable' => false,
'capability_type' => array('event', 'events'),
'map_meta_cap' => true,
'show_in_menu' => true,
'rewrite' => array( 'slug' => 'events' ),
'query_var' => true,
'show_in_rest' => false,
'show_ui' => true,
'hierarchical' => false,
'menu_position' => 1,
'menu_icon' => 'dashicons-welcome-widgets-menus',
);
register_post_type( 'events', $args );
$labels = array(
'name' => _x( 'county', 'taxonomy general name' ),
'singular_name' => _x( 'county', 'taxonomy singular name' ),
'search_items' => __( 'Search county' ),
'all_items' => __( 'All counties' ),
'parent_item' => __( 'Parent county' ),
'parent_item_colon' => __( 'Parent county:' ),
'edit_item' => __( 'Edit county' ),
'update_item' => __( 'Update county' ),
'add_new_item' => __( 'Add New county' ),
'new_item_name' => __( 'New county Name' ),
'menu_name' => __( 'counties' )
);
// Register Taxonomy
register_taxonomy('county', array('events'), array(
'hierarchical' => true,
'public' => true,
'publicly_queryable' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true
));
flush_rewrite_rules();
}
I got the following:
Create your posts and assign counties to them
The countieson the counties page will have links to view
We can create an archive page for specific counties
taxonomy-county.php
Also display yours posts
// templates/your-template/taxonomy-county.php
<?php
global $post;
$county = get_queried_object();
$args = array(
'post_type' => 'events',
'numberposts' => -1,
'tax_query' => array(
array(
'taxonomy' => $county->taxonomy,
'field' => 'term_id',
'terms' => $county->term_id
)
)
);
// Get posts by current county
$events = get_posts($args);
// All counties
$all_counties = get_terms($county->taxonomy);
foreach($all_counties as $county) {
$args = array(
'post_type' => 'events',
'numberposts' => -1,
'tax_query' => array(
array(
'taxonomy' => $county->taxonomy,
'field' => 'term_id',
'terms' => $county->term_id
)
)
);
// get posts by county
$events = get_posts($args);
}