Taxonomiebegriffe speichern

Ich habe ein interessantes Problem, von dem ich hoffe, dass es jemand schnell beantworten kann.

Ich habe meine eigene Metabox erstellt, die basierend auf “MEIN METABOX-CODE” (Liste unten) eine Dropdown-Liste aller meiner Begriffe innerhalb der von mir erstellten Taxonomie “event_types” korrekt anzeigt.

Wenn ich auf ein Problem stoße, kann ich den Begriff eines Beitrags speichern / aktualisieren, wenn ein anderer Begriff aus dem Dropdown ausgewählt und der Beitrag aktualisiert wird.

Nachdem ich mit verschiedenen Code-Bits herumgebastelt hatte, konnte ich herausfinden, dass ich durch MANUELLES Eingeben der Term_ID-Nummer (s) [getrennt durch Kommas] in den Array-Bereich die Ergebnisse erhalte, nach denen ich suche.

Zum Beispiel, wenn beim Speichern des Posts eine function diesen Code aufrufen soll

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

dann wird mein Post AKTUALISIEREN und die Term_ID 5 & 7 damit verbinden, die, wie Sie sehen können, ich in der Reihe übergebe. Das Problem ist, dass dies in meiner functions.php-Datei fest codiert ist und nicht auf einem vom Benutzer ausgewählten Dropdown-Wert basiert (Anmerkung: Ich versuche tatsächlich nur eine ID zu übergeben, aber ich habe zwei zum Testen gemacht, wie unten erklärt).

Ich bin auch in der Lage herauszufinden, dass, wenn ich den folgenden Code zu meiner Metabox-Datei hinzufügen, ich in der Lage bin, eine Liste der zugewiesenen Begriff IDs aber das letzte Element hat ein Komma.

 ID, 'event_types'); foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?> 

Also … es scheint, ich habe 85% meines Problems getriggers. Die verbleibenden 15% meines Problems bleiben wie folgt:

  1. Was muss ich zu meinem functions.php-Dateicode hinzufügen (siehe unten), damit beim Erstellen / Aktualisieren eines Beitrags der in meiner Taxonomie-Dropdown-Liste ausgewählte NEUE WERT in das Array übernommen wird?

  2. Obwohl ich in diesem Beispiel sicherstellen möchte, dass nur eine SINGLE-Taxonomie mit einem Post verknüpft werden kann, gibt es andere Situationen, in denen ich eine Checkbox-Liste erstellen möchte, bei der ich mehr als einen Wert in das Array eingeben muss. Was müsste ich also ändern, damit eine kommagetrennte Liste von Term-IDs in das Array übergeben wird? Wenn Ihre Antwort die Verwendung einiger oder eines Teils des oben aufgeführten Beispielcodes, in dem ich die IDs zurückgebe, beinhaltet, wie kann ich sicherstellen, dass die letzte ID, die gedruckt wird, am Ende kein Komma hat? (Gibt es einen anderen / besseren Weg, dies zu tun? Ich habe Hinweise gesehen, die einen Filter hinzufügen könnten, aber ich bin mir nicht sicher, wie das gemacht wird …)

Vielen Dank im Voraus – unten ist der Code, den ich derzeit in jeder Datei verwende.

CODE IN MEINE FUNKTIONEN.PHP-DATEI

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

MEIN METABOX CODE

  // DISPLAY TERMS AS DROP DOWN OPTIONS ID, 'event_types'); $event_types = get_terms('event_types', 'hide_empty=0'); ?> <option class='event_type-option' value='' >Not Assigned slug, $names[0]->slug)) echo "slug . "' selected>" . $event_type->name . "\n"; else echo "slug . "'>" . $event_type->name . "\n"; } ?>  

Solutions Collecting From Web of "Taxonomiebegriffe speichern"

Ich dachte mir, ich würde die Antwort hierüber posten, nachdem Dimas mir helfen konnte.

Unter Verwendung seiner WPAlchemey-class habe ich eine save_action -Var hinzugefügt, die so aussah (beachte, dass ich die Taxonomie für “category” verwende, die du natürlich ändern kannst, was auch immer deine benutzerdefinierte Taxonomie sein mag):

 'save_action' => 'save_taxonomy_terms', 

Ich füge dann die folgende function dazu wie folgt hinzu:

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

Ein Metabox-Code, der die Dropdown-Liste der Taxonomien anzeigt, sieht folgendermaßen aus:

  < ?php $terms = get_terms('category', 'hide_empty=0'); ?> < ?php $mb->the_field('my_terms'); ?>