How can i get taxonomies of a post type?
If I have a post type event
and i need to find out the list of taxonomies that are attached to that post type. How do I find them?
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It only takes a minute to sign up.
Sign up to join this communityI think I've got it! After looking at couple of functions in the taxonomy.php file in WordPress I have found the function get_object_taxonomies();
which did the trick :)
$taxonomies = get_object_taxonomies( array( 'post_type' => $post_type ) ); foreach( $taxonomies as $taxonomy ) : // Gets every "category" (term) in this taxonomy to get the respective posts $terms = get_terms( $taxonomy ); ?> <ul class="specials"><?php foreach( $terms as $term ) : ?> <li><h2 ><?php echo $term->name; ?></h2>
get_categories will do the job.
get_categories('taxonomy=taxonomy_name&type=custom_post_type');
Apologies for raising an old post, but I came across this problem while looking for an answer for my use case.
I wanted to retrieve all available taxonomies for a post type, and also retrieve all available terms per taxonomy.
Thank you to Nick B for setting me in the right direction with his answer: https://wordpress.stackexchange.com/a/357448/198353
// get a list of available taxonomies for a post type
$taxonomies = get_taxonomies(['object_type' => ['your_post_type']]);
$taxonomyTerms = [];
// loop over your taxonomies
foreach ($taxonomies as $taxonomy)
{
// retrieve all available terms, including those not yet used
$terms = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);
// make sure $terms is an array, as it can be an int (count) or a WP_Error
$hasTerms = is_array($terms) && $terms;
if($hasTerms)
{
$taxonomyTerms[$taxonomy] = $terms;
}
}
Have you tried anything? something like this?
<?php
$args=array(
'object_type' => array('event')
);
$output = 'names'; // or objects
$operator = 'and'; // 'and' or 'or'
$taxonomies=get_taxonomies($args,$output,$operator);
if ($taxonomies) {
foreach ($taxonomies as $taxonomy ) {
echo '<p>'. $taxonomy. '</p>';
}
}
?>
get_taxonomies();
function on codex but it has very poor documentation and was no idea how i can pass the post types.
Use get_object_taxonomies
(https://developer.wordpress.org/reference/functions/get_object_taxonomies/), which takes either the name of your custom post type or a post object as the parameter:
$taxonomies = get_object_taxonomies('custom_post_type');
$taxonomies = get_object_taxonomies($custom_post_object);
get_taxonomies()
won't return any taxonomies that are used by multiple post types (https://core.trac.wordpress.org/ticket/27918).
get_post_taxonomies()
https://developer.wordpress.org/reference/functions/get_post_taxonomies/
This worked for me.