Назначьте термин таксономии для публикации из выбранного метаполя - PullRequest
0 голосов
/ 11 марта 2020

Для лучшего пользовательского интерфейса я удалил все мета-поля таксономии с экрана пользовательского редактирования и создал поля 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, но, честно говоря, я понятия не имею, как их использовать.

Кто-нибудь будет так любезен, чтобы поднять мою осведомленность? Спасибо

...