I have a custom post type and I’m trying to call up different variations of the navigation based on the custom taxonomy slug. I’ve done this fairly easily with normal posts, like so:
<?php
if ( is_category( 'mixers' )) {
include (TEMPLATEPATH.'/nav-mixers.php');
} elseif ( is_category( 'monitors' )) {
include (TEMPLATEPATH.'/nav-monitors.php' );
} elseif ( is_category( 'speakers' )) {
include (TEMPLATEPATH.'nav-speakers.php');
}
?>
however this is proving challenging for a custom post type. I feel like I’m close but I need some help now. Here’s where I currently am.
<?php
$terms = get_the_terms( $post->id, 'prodcat' ); // get an array of all the terms as objects.
$terms_slugs = array();
foreach( $terms as $term ) {
$terms_slugs[] = $term->slug; // save the slugs in an array
}
if( $terms ) :
get_template_part( 'nav', slug );
else :
get_template_part( 'nav', 'home' );
endif;
?>
Any help is much appreciated!
To loop through all the slugs of a term list, simply call
get_the_terms()
and pull only the slugs:Then you need to check if you got any results:
The problem I then see arising is that you got a bunch of slugs in return (unless you restricted the admin meta box to allowing only a single term).
You’d then have to decide on some custom criteria which nav menu you want to have and pull that from the list of
$slugs
:The “custom taxonomy slug”, in your case, would be
prodcat
but based on your code I assume that you mean the individual term slugs.Now,
get_the_terms()
will return all terms assigned to the post but you can only load one template so you will have to determine which term slug to use if there are more than one. I don’t know how you intend to decide that but this will load a template based on one of the slugs, anyway.But I am not even sure you need the
foreach
at all:Well, it took a 24 hour work session to get me just loopy enough to figure it out. I had to pass both post id AND taxonomy name. Everything I had tried until this did either one or the other. facepalm
WOO!