Enregistrement des termes de taxonomie

14

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, basée sur "MON CODE DE METABOX" (liste ci-dessous), affiche correctement une liste déroulante de tous mes termes dans la taxonomie "event_types" que j'ai créée.

Si je rencontre un problème, je peux SAUVER / METTRE À JOUR le terme associé à une publication lorsqu'un terme différent est sélectionné dans le menu déroulant et que la publication est mise à jour.

Après avoir bricolé avec divers bits de code, j'ai pu comprendre qu'en entrant manuellement le (s) numéro (s) term_ID [séparé (s) par des virgules] dans la zone de tableau, les résultats que je recherche sont obtenus.

Par exemple, si lors de la sauvegarde d'un article, une fonction devait appeler ce code

wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);

alors mon message MISE À JOUR ET associe le term_ID 5 & 7 comme vous pouvez le voir, je passe dans le tableau. Le problème est qu’il 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 (note: 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'ajoutais le code suivant à mon fichier metabox, je pouvais également afficher en écho une liste d'identifiants de termes attribués, mais le dernier élément comportait 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 mes problèmes soient résolus. Les 15% restants de mon problème restent les suivants:

  1. Que dois-je ajouter à mon code de fichier functions.php (indiqué ci-dessous) pour que, lorsque je crée / mette à jour un message, la NOUVELLE VALEUR sélectionnée dans ma liste déroulante de taxonomie soit transmise au tableau?

  2. Bien que, dans cet exemple, je veille à ce que seule une taxonomie SINGLE puisse être associée à une publication, il existe d'autres situations dans lesquelles je souhaiterais créer une liste de cases à cocher nécessitant que je transmette plusieurs valeurs. dans le tableau. En tant que tel, que devrais-je changer pour qu'une liste d'identifiants de termes séparés par des virgules soit passée dans le tableau? Si votre réponse implique l'utilisation d'une partie ou de partie du code exemple que j'ai énuméré ci-dessus et où je répète les identifiants, comment puis-je m'assurer que le dernier identifiant imprimé ne comporte pas de virgule à la fin? (Y a-t-il une autre façon / meilleure de le faire? J'ai vu des astuces qui pourraient concerner l'ajout d'un filtre mais je ne suis pas sûr de savoir comment cela est fait ...)

Merci beaucoup à l’avance, le code que j’utilise actuellement dans chaque fichier est indiqué ci-dessous.

CODE DANS MES FONCTIONS.FICHIER 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>
    
posée NetConstructor.com 14.09.2010 - 10:08

1 réponse

6

Je pensais que je posterais la réponse à cette question après que Dimas ait pu m'aider.

Utilisant sa classe WPAlchemey, j’ai ajouté un save_action var qui ressemblait à ceci (notez que j’utilise la taxonomie pour "catégorie" que vous pouvez bien sûr changer pour votre taxonomie personnalisée):

'save_action'   => 'save_taxonomy_terms',

J'ajoute ensuite la fonction suivante pour cela, comme suit:

function save_taxonomy_terms($meta, $post_id) {
wp_set_post_terms($post_id, array($meta['my_terms']), 'category', FALSE);
}

Un code my metabox qui affiche la liste déroulante des taxonomies se présente comme suit:

<label>Event Category:</label>
    <?php $terms = get_terms('category', 'hide_empty=0'); ?>
    <?php $mb->the_field('my_terms'); ?>
    <select name="<?php $mb->the_name(); ?>">
    <option value='' <?php if (!count($terms)) echo "selected";?>>Not Assigned</option>
    <?php foreach ($terms as $term): ?>
    <option value="<?php echo $term->term_id; ?>"<?php $mb->the_select_state($term->term_id); ?><?php echo '>' . $term->name; ?></option>
    <?php endforeach; ?>
    </select>
    
réponse donnée NetConstructor.com 17.09.2010 - 09:03

Lire d'autres questions sur les étiquettes