Получить шаблонную часть на основе пользовательского таксономического термина

У меня есть настраиваемый тип сообщений, и я пытаюсь вызвать различные варианты навигации, основанные на пользовательском таксономии. Я сделал это довольно легко с обычными сообщениями, например:

<?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'); } ?> 

однако это доказывает сложность для настраиваемого типа сообщений. Я чувствую, что я рядом, но мне нужна помощь сейчас. Вот где я сейчас.

 <?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; ?> 

Любая помощь высоко ценится!

Чтобы get_the_terms() все пули списка терминов, просто вызовите get_the_terms() и потяните только пули:

 $slugs = wp_list_pluck( get_the_terms( get_the_ID(), 'prodcat' ), 'slug' ); 

Затем вам нужно проверить, есть ли у вас какие-либо результаты:

 if ( ! empty( $slugs ) ) 

Проблема, которую я потом вижу, заключается в том, что вы получили кучу пули взамен (если вы не ограничили мета-поле администратора, чтобы разрешить только один термин).

Затем вам нужно будет решить некоторые пользовательские критерии, которые вы хотите найти в навигационном меню, и вытащите это из списка $slugs :

 // Decide which slug fits and then determine the key: $key = 0; get_template_part( 'nav', $slugs[ $key ] ); 

«Таможенная таксономия», в вашем случае, будет prodcat но на основе вашего кода я предполагаю, что вы имеете в виду отдельные термины slugs.

Теперь get_the_terms() вернет все термины, назначенные сообщению, но вы можете загружать только один шаблон, поэтому вам нужно будет определить, какой термин slug использовать, если их больше одного. Я не знаю, как вы собираетесь это решать, но в любом случае это будет загружать шаблон, основанный на одном из пули.

 $terms = get_the_terms( $post->id, 'post_tag' ); // 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( !empty($terms_slugs) ) : get_template_part( 'nav', array_pop($terms_slugs) ); else : get_template_part( 'nav', 'home' ); endif; 

Но я даже не уверен, что вам нужен foreach вообще:

 // get an array of all the terms as objects. $terms = get_the_terms( $post->id, 'post_tag' ); if ( ! empty( $terms ) ) : $terms = array_pop( $terms ); get_template_part( 'nav', $terms->slug ); else : get_template_part( 'nav', 'home' ); endif; 

Ну, это заняло 24-часовую рабочую сессию, чтобы получить меня достаточно замкнутым, чтобы понять это. Мне пришлось передать имя и идентификатор таксономии. Все, что я пробовал, пока это не сделало ни то, ни другое. Facepalm

 <?php $terms = get_the_terms( $post->id, 'prodcat', array( 'parent' => 0 ) ); $terms_slugs = array(); foreach( $terms as $term ) { $terms_slugs[] = $term->slug; } if( !empty($terms_slugs) ) : get_template_part( 'nav', array_pop($terms_slugs) ); else : get_template_part( 'nav', 'home' ); endif; ?> 

WOO!