Bonjour,
Lorsque j'ajoute une taxonomie depuis l'admin, et que je l'intègre à un item de mon portfolio, j'arrive à la récupérer en PHP et l'afficher correctement.

<?php $competance=get_the_term_list(get_the_ID(),'type'); echo $competance; ?>

Le problème, c'est lorsqu'un de mes items a 2 taxonomies (Web design, et art graphique par exemple) Wordpress me les colles les uns aux autres, ce qui me donne Webdesignartgraphique. J'aimerais qu'ils soient séparés, quelqu'un sait il comment faire ? J'ai essayé en ajoutant un echo" "; mais il me place l'espace après la taxo'.

En espérant trouver de l'aide.
Merci d'avance.

8 réponses


Bonjour,

Je me répète car je t'ai déjà donné une réponse la ou le sujet était posté avant mais visiblement ç n'a pas été suivi :)

je pense que tu peux te débrouiller avec ça

<?php $competance=get_the_term_list(get_the_ID(),'type','',', '); echo $competance; ?>

Note que sur l'espace vide après type tu peux y mettre un mot comme 'Compétences : ' histoire de préciser la taxonomie.

Cordialement,

Kamel38
Auteur

Le problème c'est qu'afin d'obtenir la forme qu'il me fallait, j'ai dû transformer les espaces en underscore. Voici la portion de code complète:

<?php $competance=get_the_term_list(get_the_ID(),'type','',' ');$competance=strip_tags($competance); $competance=str_replace(" ", "_", $competance); echo $competance; ?>

Du coup, si je met un espace, il me le transform en _ alors que pour le coup, c'est d'un espace que j'ai besoin :/

Kamel38
Auteur

Petit up :/

Bonjour,

Je ne comprend pas ton problème d'underscore mais voici une solution : coupler les fonctions get_the_terms et get_term_link.

La fonction get_the_terms te permet de récupérer un tableau d'objet représentant les terms de ta taxonomy associés à ton post.
La dessus tu boucles afin de construire ton propre listing de terms, avec espaces, des underscores ou tu ce que tu veux.
Pour créer des liens vers les pages d'archives de ces terms, tu utilises get_term_link.

Petit conseil pour la suite : plonge toi dans le codex pour trouver ce genre de solution.
La rubrique "Related" en bas de chaque page de la doc' te permet de consulter d'autres pages en rapport avec la page actuelle.
Exemple pour ta question : lorsque tu te places sur la documentation de la fonction get_the_term_list et que tu consultes la section "Related", tu trouveras les deux fonctions que je t'ai cité.

Prend le temps d'apprivoiser le codex, il te rendra bien des services :)

Bonne journée

Kamel38
Auteur

"La dessus tu boucles afin de construire ton propre listing de terms,"
Je n'ai pas compris cela. Et je ne comprend pas non plus pourquoi tu parles de la fonction "Get term link" puisque je n'utilise pas les liens :/

Alors ne l'utilise pas.

Quand je parle de boucle, je parle d'un for ou d'un foreach de PHP.
C'est un tableau donc pour accéder à chacun des éléments de ton tableau, un à un, tu passes par une boucle.

Kamel38
Auteur

Mais en faite, mon problème est un tantinet plus compliqué que ça : Mon portfolio intègre le script MixItUp. Du coup, dans la classe de mes <li> du portfolio, je devais avoir une structure précise : "mix macatégorie" en sachant que je devais transformé les espaces (entrés dans l'admin) en underscore pour que "ma catégorie" devienne "ma_catégorie" (MixItUp prend en charge les groupes d'un seul mot, il fallait donc les rattachés).
C'est donc pour ça que j'ai utilisé le

$competance=str_replace(" ", "_", $competance);

Mais le problème c'est que si dans l'admin, on signale qu'un item du portfolio appartient à 2 catégories, il ne me les sépares pas (puisque plus tôt, j'ai transformé les espaces en "_"). Je te l'accorde c'est très complexe, mais sans ça, je ne peux pas continuer l'avancement de mon thème :/

Non ce n'est pas complexe, je t'ai donné une solution plus haut.

La fonction get_the_terms() te renvoie un tableau avec chacun des terms de ta catégorie, associés à ton post.
En bouclant sur chacun d'eux, tu peux leur appliquer ta règle de l'underscore séparément puis les placer dans une liste un à un ou dans tout ce que tu veux.

Je n'ai pas testé le code ci-dessous mais ça devrait ressembler à ça :

$terms = get_the_terms( get_the_ID(), 'type' );
$html = '';
$first = true;
foreach( $terms as $term ){
    // On remplace les les espaces par des underscores
    $term->name = str_replace(" ", "_", $term->name);

    // On test si on est sur le premier élément
    if( $first ){
        $first = false;
        $html .= $term->name;
    }
    else{
        $html .= ', '.$term->name;
    }
}
echo $html;

C'est une boucle toute bête.
Si une fonction de WordPress ne te permet pas de faire ce que tu veux, il en existe une autre.
Il faut se creuser les méninges :)