Сохранение Терминов Таксономии
У меня есть интересная проблема, на которую, я надеюсь, кто-нибудь сможет быстро ответить.
Я создал свой собственный метабокс, который на основе "МОЕГО КОДА МЕТАБОКСА" (список ниже) правильно отображает раскрывающийся список всех моих терминов в созданной мной таксономии "типы событий".
Когда я сталкиваюсь с проблемой, я могу СОХРАНИТЬ/ОБНОВИТЬ термин, связанный с публикацией, когда в раскрывающемся списке выбран другой термин, и публикация обновляется.
После переделки с помощью различных битов кода я смог выяснить, что, ВРУЧНУЮ введя номер(ы) term_ID [разделенные запятыми] в область массива, я получаю результаты, которые ищу.
Например, если при сохранении сообщения функция должна была вызвать этот код
wp_set_post_terms( $post_id, array(5,7), 'event_types', FALSE);
Затем мой пост ОБНОВИТСЯ и свяжет с ним term_ID 5 и 7, которые, как вы можете видеть, я передаю в массиве. Проблема в том, что это жестко закодировано в моем functions.php файл, а не на основе выбранного пользователем раскрывающееся значение (примечание: На самом деле я пытаюсь передать только один идентификатор, но я сделал два для тестирования, как описано ниже).
Я также смог выяснить, что если я добавлю следующий код в свой файл metabox, то смогу воспроизвести список назначенных идентификаторов терминов, но в последнем элементе есть запятая.
<?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 код файла (указан ниже), чтобы при создании/обновлении записи НОВОЕ ЗНАЧЕНИЕ, выбранное из моего раскрывающегося списка таксономии, передавалось в массив?
Хотя в этом примере я хочу убедиться, что с публикацией может быть связана только ОДНА таксономия, есть и другие ситуации, когда я хотел бы создать список флажков, который потребовал бы, чтобы я передал в массив более одного значения. Таким образом, что мне нужно изменить, чтобы список идентификаторов терминов, разделенных запятыми, передавался в массив? Если ваш ответ предполагает использование части или части кода примера, который я перечислил выше, где я повторяю идентификаторы, то как мне убедиться, что последний напечатанный идентификатор не содержит запятой в конце? (Есть ли другой/лучший способ сделать это? Я видел подсказки, которые могут относиться к добавлению фильтра, но я не уверен, как это делается...)
Заранее большое вам спасибо, ребята - ниже приведен код, который я в настоящее время использую в каждом файле.
КОД В МОЕМ FUNCTIONS.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>
1 answers
Я решил, что опубликую ответ на этот вопрос после того, как Димас сможет мне помочь.
Используя его класс 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>