Сохранение условий таксономии


16

У меня есть интересная проблема, на которую, я надеюсь, кто-то может быстро ответить.

Я создал свой собственный метабокс, который на основе «МОЕГО КОДА METABOX» (список ниже) правильно отображает выпадающий список всех моих терминов в рамках таксономии «event_types», которую я создал.

Когда я сталкиваюсь с проблемой, я могу СОХРАНИТЬ / ОБНОВИТЬ термин, связанный с сообщением, когда из раскрывающегося списка выбран другой термин, и сообщение обновляется.

После того, как я поработал с различными битами кода, я смог выяснить, что путем ручного ввода числа (ов) term_ID [разделенных запятыми] в область массива, я получаю результаты, которые я ищу.

Например, если при сохранении поста функция должна была вызвать этот код

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

тогда мой пост ОБНОВЛЯЕТ и связывает с ним term_ID 5 & 7, который, как вы видите, я передаю в массив. Проблема в том, что это жестко запрограммировано в моем файле functions.php и не основано на выбранном пользователем раскрывающемся значении (примечание: на самом деле я только пытаюсь передать один идентификатор, но я сделал два для тестирования, как описано ниже).

Я также смог выяснить, что, если я добавлю следующий код в файл метабокса, я смогу отобразить список назначенных терминов, но последний элемент имеет запятую.

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

Итак ... кажется, что 85% моей проблемы решено. Оставшиеся 15% моей проблемы остаются следующими:

  1. Что мне нужно добавить к моему файлу functions.php (указанному ниже), чтобы при создании / обновлении записи в массив передавалась НОВАЯ ЗНАЧЕНИЕ, выбранная из раскрывающегося списка таксономии?

  2. Хотя в этом примере я хочу убедиться, что с сообщением может быть связана только ЕДИНАЯ таксономия, существуют другие ситуации, когда я хотел бы создать список флажков, который потребовал бы, чтобы я передал более одного значения в массив. Таким образом, что мне нужно изменить, чтобы разделенный запятыми список идентификаторов терминов передавался в массив? Если ваш ответ предполагает использование некоторого или части приведенного выше примера кода, в котором я повторяю идентификаторы, то как я могу убедиться, что последний напечатанный идентификатор не имеет запятой в конце? (Есть ли другой / лучший способ сделать это? Я видел подсказки, которые могут относиться к добавлению фильтра, но я не уверен, как это сделать ...)

Ребята, большое спасибо заранее - ниже приведен код, который я сейчас использую в каждом файле.

КОД В МОИХ ФУНКЦИЯХ.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);
    }

МОЙ МЕТАБОКС КОД

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

Ответы:


6

Я решил опубликовать ответ на этот вопрос после того, как Димас сможет мне помочь.

Используя его класс WPAlchemey, я добавил переменную save_action, которая выглядела следующим образом (обратите внимание, что я использую таксономию для «категории», которую, конечно, вы можете изменить на любую свою таксономию):

'save_action'   => 'save_taxonomy_terms',

Затем я добавляю для этого следующую функцию:

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

Мой код метабокса, который отображает выпадающий список таксономий, выглядит следующим образом:

<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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.