Question

J'ai un problème intéressant que j'espère que quelqu'un peut répondre rapidement.

Je l'ai créé ma propre METABOX qui, basé sur « MON METABOX CODE » (liste ci-dessous) affiche correctement une liste déroulante de tous mes termes au sein de la taxonomie « event_types » J'ai créé.

Là où je suis en cours d'exécution dans un problème est de pouvoir SAVE / mettre à jour le terme associé à un poste où un terme différent est sélectionné dans le menu déroulant et le poste est mis à jour.

Après bricoler avec les différents bits de code I a pu déterminer que par MANUELLEMENT entrant le numéro de term_id (s) [séparés par des virgules] dans la zone de réseau j'obtenir les résultats que je recherche.

Par exemple, si sur l'enregistrement de la poste une fonction devait appeler ce code

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

puis mon post actualisera et associer le term_id 5 et 7 à ce 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 en fonction d'un utilisateur valeur sélectionnée déroulant (note: Je suis en fait seulement en train de passer un ID mais je l'ai fait deux pour tester, comme expliqué ci-dessous)

.

J'ai également été en mesure de comprendre que si j'ajouter le code suivant à mon dossier METABOX alors je suis en mesure d'écho une liste d'ID terme 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 . ','; } ?>

Alors ... il semble que j'ai 85% de mon problème résolu. Le reste 15% de mes restes de problème comme suit:

  1. Que dois-je ajouter à mon code de fichier functions.php (voir la liste ci-dessous) de sorte que lorsque je crée / mettre à jour un poste de la NOUVELLE VALEUR choisie dans ma taxonomie liste déroulante est passé dans le tableau?

  2. Bien que dans cet exemple, je cherche à faire en sorte que seule une taxonomie peut être associée à un poste, il y a d'autres situations où je voudrais créer une liste de cases à cocher qui me obligerait à passer plus d'une valeur dans le tableau. En tant que tel, qu'est-ce que je dois changer de sorte que séparés par des virgules une liste d'ID terme est passé dans le tableau? Si votre réponse consiste à utiliser une partie ou une partie du code exemple I ci-dessus où je fais l'écho des ID alors comment puis-je assurer le dernier ID qui est imprimé n'a pas une virgule à la fin? (Y at-il un autre / meilleure façon de le faire? J'ai vu des notes qui pourraient se rapporter à l'ajout d'un filtre, mais je ne sais pas comment cela se fait ...)

Merci les gars beaucoup à l'avance - ci-dessous est le code que je suis actuellement en utilisant dans chaque fichier

.

CODE DANS MON DOSSIER 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>
Était-ce utile?

La solution

Je me suis dit que je posterais la réponse à cette après Dimas a pu me aider.

En utilisant sa WPAlchemey classe I a ajouté un save_action var qui ressemblait à ceci (notez que j'utilise la taxonomie pour « catégorie » qui bien sûr vous pouvez changer quel que soit votre taxonomie personnalisée peut être):

'save_action'   => 'save_taxonomy_terms',

Je puis ajouter 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 mon code METABOX qui affiche la liste déroulante des taxinomies ressemble à ceci:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top