web-dev-qa-db-fra.com

Obtenir une partie de modèle basée sur un terme de taxonomie personnalisé

J'ai un type de message personnalisé et j'essaie d'appeler différentes variantes de la navigation en fonction du slug de taxonomie personnalisé. Je l'ai fait assez facilement avec les posts normaux, comme ceci:

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

cependant, cela s'avère difficile pour un type de publication personnalisé. J'ai l'impression d'être proche mais j'ai besoin d'aide maintenant. Voici où je suis actuellement.

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

Toute aide est très appréciée!

2
kristina childs

Eh bien, il a fallu une session de travail de 24 heures pour que je sois suffisamment fou pour comprendre. Je devais passer les deux identifiant de poste ET nom de taxonomie. Tout ce que j’avais essayé jusqu’à ce que ce soit soit l’un ou l’autre. 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;
?>

COURTISER!

2
kristina childs

La "slug taxonomie personnalisée", dans votre cas, serait prodcat mais en fonction de votre code, je suppose que vous entendez le terme individuel slug.

Désormais, get_the_terms() renverra tous les termes affectés à la publication, mais vous ne pouvez charger qu'un seul modèle. Vous devrez donc déterminer le terme slug à utiliser s'il en existe plusieurs. Je ne sais pas comment vous avez l'intention de décider cela, mais cela chargera un modèle basé sur l'une des limaces, de toute façon.

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

Mais je ne suis même pas sûr que vous ayez besoin de la foreach du tout:

// 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;
2
s_ha_dum

Pour parcourir toutes les listes d'une liste de termes, appelez simplement get_the_terms() et ne tirez que les chaînes:

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

Ensuite, vous devez vérifier si vous avez des résultats :

if ( ! empty( $slugs ) )

Le problème que je vois alors surgir est que vous avez un tas de slugs en retour (à moins que vous ne limitiez la méta-boîte admin à n'autoriser qu'un seul terme).

Vous devez ensuite choisir des critères personnalisés du menu de navigation que vous souhaitez utiliser et extraire-le de la liste de $slugs:

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