У меня есть интересная проблема, на которую, я надеюсь, кто-то может быстро ответить.
Я создал свой собственный метабокс, который на основе «МОЕГО КОДА 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% моей проблемы остаются следующими:
Что мне нужно добавить к моему файлу functions.php (указанному ниже), чтобы при создании / обновлении записи в массив передавалась НОВАЯ ЗНАЧЕНИЕ, выбранная из раскрывающегося списка таксономии?
Хотя в этом примере я хочу убедиться, что с сообщением может быть связана только ЕДИНАЯ таксономия, существуют другие ситуации, когда я хотел бы создать список флажков, который потребовал бы, чтобы я передал более одного значения в массив. Таким образом, что мне нужно изменить, чтобы разделенный запятыми список идентификаторов терминов передавался в массив? Если ваш ответ предполагает использование некоторого или части приведенного выше примера кода, в котором я повторяю идентификаторы, то как я могу убедиться, что последний напечатанный идентификатор не имеет запятой в конце? (Есть ли другой / лучший способ сделать это? Я видел подсказки, которые могут относиться к добавлению фильтра, но я не уверен, как это сделать ...)
Ребята, большое спасибо заранее - ниже приведен код, который я сейчас использую в каждом файле.
КОД В МОИХ ФУНКЦИЯХ.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>
источник