it-swarm-eu.dev

Ukládání Taxonomy pojmy

Mám zajímavý problém, který doufám, že někdo může rychle odpovědět.

Vytvořil jsem vlastní metabox, který na základě "MY METABOX CODE" (níže uvedený seznam) správně zobrazuje rozevírací seznam všech mých výrazů v rámci taxonomie "event_types", kterou jsem vytvořil.

V případě, že narazím na problém, je možné uložit termín spojený s příspěvkem, pokud je z rozevíracího seznamu vybrán jiný termín a příspěvek je aktualizován.

Po pohrávání se s různými kódovými bity jsem byl schopen zjistit, že MANUALLY zadáním čísla (čísel) term_ID [oddělených čárkami] do oblasti pole dostávám výsledky, které hledám.

Pokud například při ukládání příspěvku funkce volala tento kód

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

pak můj příspěvek BUDE AKTUALIZOVAT a přidružit k němu term_ID 5 & 7, který, jak vidíte, přecházím v poli. Problém je v tom, že je to pevně zakódováno do mého souboru functions.php a není založeno na uživatelsky zvolené rozevírací hodnotě (poznámka: ve skutečnosti se snažím předat jen jedno ID, ale já jsem udělal dva pro testování, jak je vysvětleno níže).

Také jsem byl schopen zjistit, že pokud přidám následující kód do souboru metabox pak jsem schopen echo seznam přiřazených termín ID, ale poslední položka má čárku.

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

Takže ... zdá se, že jsem vyřešil 85% svého problému. Zbývajících 15% mého problému zůstává takto:

  1. Co musím přidat do mého souboru code.php (uvedeného níže) tak, aby při vytváření/aktualizaci příspěvku byla do pole předána nová hodnota vybraná z rozevíracího seznamu taxonomie?

  2. Ačkoliv v tomto příkladu se snažím zajistit, aby s příspěvkem mohlo být spojeno pouze taxonomie SINGLE, existují i ​​jiné situace, kdy bych chtěl vytvořit seznam políček, který by vyžadoval, aby do pole bylo více než jedna hodnota. Co bych tedy musel změnit, aby čárkami oddělený seznam termínových ID byl předán do pole? Pokud vaše odpověď zahrnuje použití některého nebo části příkladu kódu, který jsem uvedl výše, kde jsem echo IDs, pak jak mám zajistit, že poslední vytištěné ID nemá čárku na konci? (Existuje jiný/lepší způsob, jak to udělat? Viděl jsem rady, které by se mohly týkat přidání filtru, ale nejsem si jistý, jak se to dělá ...)

Děkuji kluci moc předem - níže je kód, který používám v každém souboru.

KÓD V MY FUNKCÍCH.PHP FILE

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

MY 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>
15

Myslel jsem si, že po tom, co mi Dimas bude schopen pomoci, pošlu odpověď.

S využitím své třídy WPAlchemey jsem přidal příkaz save_action var.

'save_action'   => 'save_taxonomy_terms',

Přidám k tomu následující funkci následujícím způsobem:

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

Kód mého metaboxu, který zobrazuje rozevírací seznam taxonomií, vypadá takto:

<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>
6