Для лучшего пользовательского интерфейса я удалил все мета-поля таксономии с экрана пользовательского редактирования и создал поля select2, которые запрашивают термины таксономии.
У меня есть иерархические таксономии, такие как "пользовательские категории" и не иерархические таксономии, такие как «пользовательские теги». У меня также есть отдельные поля select2 (например, для пользовательских категорий) и поля multi select2 (например, custom-tags ".
Поля выглядят так:
// CATEGORIES FIELD
$html = '';
$label = __( 'Category: ', 'nutrix' );
$current_tags = get_post_meta( $post_object->ID, 'nutrix_select2_categories',true );
if( $categories = get_terms( 'nutrix-category', 'hide_empty=0' ) ) {
$html .= '<div class="nutrix-div-20"><p><label for="nutrix_select2_categories">' . $label . '</label><br /><select id="nutrix_select2_categories" name="nutrix_select2_categories[]" >';
foreach( $categories as $category ) {
$selected = ( is_array( $current_tags ) && in_array( $category->term_id, $current_tags ) ) ? ' selected="selected"' : '';
$html .= '<option value="' . $category->term_id . '"' . $selected . '>' . $category->name . '</option>';
}
$html .= '</select></p></div>';
echo $html;
}
// TAGS FIELD
$html = '';
$label = __( 'Tags: ', 'nutrix' );
$current_tags = get_post_meta( $post_object->ID, 'nutrix_select2_tags',true );
if( $tags = get_terms( 'nutrix-tag', 'hide_empty=0' ) ) {
$html .= '<div class="nutrix-div-40"><p><label for="nutrix_select2_tags">' . $label . '</label><br /><select id="nutrix_select2_tags" name="nutrix_select2_tags[]" multiple="multiple" >';
foreach( $tags as $tag ) {
$selected = ( is_array( $current_tags ) && in_array( $tag->term_id, $current_tags ) ) ? ' selected="selected"' : '';
$html .= '<option value="' . $tag->term_id . '"' . $selected . '>' . $tag->name . '</option>';
}
$html .= '</select></p></div>';
echo $html;
}
Внутри моего сохранения Функция, выбранные значения в настоящее время сохраняются как post_meta, например:
if( isset( $_POST['nutrix_select2_categories'] ) )
update_post_meta( $post_id, 'nutrix_select2_categories', $_POST['nutrix_select2_categories'] );
else
delete_post_meta( $post_id, 'nutrix_select2_categories' );
if( isset( $_POST['nutrix_select2_tags'] ) )
update_post_meta( $post_id, 'nutrix_select2_tags', $_POST['nutrix_select2_tags'] );
else
delete_post_meta( $post_id, 'nutrix_select2_tags' );
Это означает, что я сохраняю мета-значения, где термины таксономии должны быть назначены для публикации. Чтобы сделать вещи быстрее, я бы хотел назначить напрямую выбранные термины к сообщению.
Я много искал по inte rnet и нашел set_post_terms и set_post_object_terms, но, честно говоря, я понятия не имею, как их использовать.
Кто-нибудь будет так любезен, чтобы поднять мою осведомленность? Спасибо