J'ai un problème intéressant auquel j'espère que quelqu'un pourra répondre rapidement.
J'ai créé ma propre métabox qui, sur la base de "MON CODE METABOX" (liste ci-dessous) affiche correctement une liste déroulante de tous mes termes dans la taxonomie "event_types" que j'ai créée.
Lorsque je rencontre un problème, c'est la possibilité d'enregistrer / mettre à jour le terme associé à un message lorsqu'un autre terme est sélectionné dans la liste déroulante et que le message est mis à jour.
Après avoir bricolé divers bits de code, j'ai pu comprendre qu'en entrant MANUELLEMENT le (s) nombre (s) term_ID [séparés par des virgules] dans la zone du tableau, j'obtiens les résultats que je recherche.
Par exemple, si lors de l'enregistrement du message, une fonction appelait ce code
wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);
puis mon article MISE À JOUR et associera le term_ID 5 & 7 qui, comme vous pouvez le voir, je passe dans le tableau. Le problème est que cela est codé en dur dans mon fichier functions.php et non basé sur une valeur de liste déroulante sélectionnée par l'utilisateur (remarque: j'essaie en fait de ne transmettre qu'un seul ID mais j'en ai fait deux pour les tests comme expliqué ci-dessous).
J'ai également pu comprendre que si j'ajoute le code suivant à mon fichier metabox, je suis en mesure de faire écho à une liste d'ID de termes attribués, mais le dernier élément a une virgule.
<?php $event_types = wp_get_object_terms($post->ID, 'event_types');
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>
Donc ... il semble que 85% de mon problème soit résolu. Les 15% restants de mon problème restent les suivants:
Que dois-je ajouter à mon code de fichier functions.php (répertorié ci-dessous) pour que lorsque je crée / mette à jour une publication, la NOUVELLE VALEUR sélectionnée dans ma liste déroulante de taxonomie soit transmise au tableau?
Bien que dans cet exemple, je cherche à m'assurer que seule une taxinomie UNIQUE peut être associée à un message, il existe d'autres situations où je voudrais créer une liste de cases à cocher qui m'obligerait à passer plus d'une valeur dans le tableau. En tant que tel, que devrais-je changer pour qu'une liste d'ID de termes séparés par des virgules soit passée dans le tableau? Si votre réponse implique d'utiliser une partie ou une partie du code d'exemple que j'ai énuméré ci-dessus, où je fais écho aux ID, alors comment puis-je m'assurer que le dernier ID imprimé n'a pas de virgule à la fin? (Y a-t-il une façon différente / meilleure de le faire? J'ai vu des conseils qui pourraient se rapporter à l'ajout d'un filtre mais je ne sais pas comment cela se fait ...)
Merci beaucoup à l'avance - voici le code que j'utilise actuellement dans chaque fichier.
CODE DANS MON FICHIER FUNCTIONS.PHP
function save_event_taxonomy_terms($meta, $post_id) {
$event_types = wp_get_object_terms($post->ID, 'event_types');
wp_set_post_terms( $post_id, array($names), 'event_types', FALSE);
}
MON CODE METABOX
<select name='post_event_types' id='post_event-types'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
<?php
$names = wp_get_object_terms($post->ID, 'event_types');
$event_types = get_terms('event_types', 'hide_empty=0');
?>
<option class='event_type-option' value='' <?php if (!count($names)) echo "selected";?>>Not Assigned</option>
<?php foreach ($event_types as $event_type) {
if (!is_wp_error($names) && !empty($names) && !strcmp($event_type->slug, $names[0]->slug))
echo "<option class='event_type-option' value='" . $event_type->slug . "' selected>" . $event_type->name . "</option>\n";
else
echo "<option class='event_type-option' value='" . $event_type->slug . "'>" . $event_type->name . "</option>\n";
}
?>
</select>
la source