Obter parte do modelo com base no termo de taxonomia personalizado

Eu tenho um tipo de postagem personalizado e estou tentando chamar diferentes variações da navegação com base na slub taxonomia personalizada. Eu fiz isso bastante facilmente com mensagens normais, assim:

 

No entanto, isso está provando um desafio para um tipo de postagem personalizado. Sinto que estou perto, mas preciso de ajuda agora. Aqui é onde estou atualmente.

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

Qualquer ajuda é muito apreciada!

Solutions Collecting From Web of "Obter parte do modelo com base no termo de taxonomia personalizado"

Para percorrer todos os slugs de uma lista de termos, basta chamar get_the_terms() e puxar apenas os slugs:

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

Então você precisa verificar se você obteve algum resultado:

 if ( ! empty( $slugs ) ) 

O problema que eu vejo surgir é que você obteve um monte de slugs em troca (a menos que você restringisse a checkbox de meta do administrador para permitir apenas um único termo).

Você teria que decidir sobre alguns critérios personalizados que o menu de navegação que deseja ter e puxar isso da lista de $slugs :

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

A ” prodcat taxonomia personalizada”, no seu caso, seria prodcat mas com base no seu código, suponho que você quer dizer as prodcat do termo individual.

Agora, get_the_terms() retornará todos os termos atribuídos à postagem, mas você só pode carregar um modelo para que você precise determinar qual slug do termo usar se houver mais de um. Eu não sei como você pretende decidir isso, mas isso irá carregar um modelo com base em uma das lesmas, de qualquer maneira.

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

Mas nem tenho certeza de que você precisa do 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; 

Bem, demorou uma session de trabalho de 24 horas para me dar apenas um loopy o suficiente para descobrir. Eu tive que passar o ID da postagem e o nome da taxonomia. Tudo o que eu tentei até que isso acontecesse um ou outro. 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!