Frage

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

Ich habe mein eigenes Metabox erstellt, das auf "My Metabox Code" (Liste unten) korrekt eine Dropdown -Liste aller meiner Begriffe in der von mir erstellten Taxonomie "Event_types" angezeigt wird.

Wenn ich in ein Problem stoße, kann ich den Begriff, der einem Beitrag zugeordnet ist, speichern/aktualisieren kann, wenn ein anderer Begriff aus der Dropdown -Down -Stelle ausgewählt wird und der Beitrag aktualisiert wird.

Nachdem ich mit verschiedenen Code -Bits herumbastelt hatte, konnte ich herausfinden, dass ich durch die manuelle Eingabe der term_id -Nummer (en) [durch Kommas] in den Array -Bereich die Ergebnisse erhalten habe, nach denen ich suche.

Zum Beispiel, wenn das Speichern des Beitrags eine Funktion diesen Code aufrufen sollte

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

Dann wird mein Beitrag den Term_id 5 & 7 aktualisieren und mit ihm verknüpfen, was, wie Sie sehen können, in das Array bestehe. Das Problem ist, dass dies in meiner Datei functions.php und nicht auf einem vom Benutzer ausgewählten Dropdown -Wert kodiert wird (Hinweis: Ich versuche eigentlich nur, eine ID zu übergeben, aber ich habe zwei zum Testen durchgeführt, wie unten erläutert).

Ich konnte auch herausfinden, dass ich, wenn ich den folgenden Code zu meiner Metabox -Datei hinzufüge, eine Liste der zugewiesenen Laufzeit -IDs wiederholen kann, aber das letzte Element hat ein Komma.

<?php $event_types = wp_get_object_terms($post->ID, 'event_types'); 
foreach ($event_types as $event_type) { echo $event_type->term_id . ','; } ?>

Also ... es scheint, dass ich 85% meines Problems gelöst habe. Die restlichen 15% meines Problems bleiben wie folgt:

  1. Was muss ich zu meinen functions.php -Dateicode (unten aufgeführt) hinzufügen, damit beim Erstellen/Aktualisieren eines Beitrags der neue Wert, der aus meiner Taxonomie -Dropdown -Liste ausgewählt wurde, in das Array übergeben wird?

  2. Obwohl ich in diesem Beispiel sicherstellen möchte, dass nur eine einzige Taxonomie mit einem Beitrag in Verbindung gebracht werden kann, gibt es andere Situationen, in denen ich eine Kontrollkästchen -Liste erstellen möchte, in der ich mehr als einen Wert in das Array übergeben muss. Was müsste ich als solche ändern, damit eine Kommas -Liste der Laufzeit -IDs in das Array übergeben wird? Wenn in Ihrer Antwort einige oder einen Teil des Beispielcodes, den ich oben aufgelistet habe, wo ich die IDs wiederhole, wie kann ich sicherstellen, dass die letzte gedruckte ID am Ende kein Komma hat? (Gibt es eine andere/bessere Möglichkeit, dies zu tun? Ich habe Hinweise gesehen, die sich auf das Hinzufügen eines Filters beziehen 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 meiner functions.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

<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>
War es hilfreich?

Lösung

Ich dachte, ich würde die Antwort darauf veröffentlichen, nachdem Dimas mir helfen konnte.

Unter Verwendung seiner Wpalchemey -Klasse habe ich eine Save_Action -Var hinzugefügt, die so aussah (beachten Sie, dass ich die Taxonomie für "Kategorie" verwende, was Sie natürlich in die benutzerdefinierte Taxonomie ändern können):

'save_action'   => 'save_taxonomy_terms',

Ich füge dann die folgende Funktion wie folgt hinzu:

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

Ein My Metabox -Code, in dem die Dropdown -Liste der Taxonomien angezeigt wird, sieht Folgendes aus:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top