WordPress - сохранить выбранный вариант выпадающего меню и показать его на веб-интерфейсе - PullRequest
0 голосов
/ 27 сентября 2019

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

function changePostOrder(){
    ?> 
    <tr class="form-field">
        <th scope="row" valign="top"><label for="cat_page_title"><?php _e('Post Order'); ?></label></th>
        <td>
            <select name="post_order" id="post_order">>
                <option value="" disabled selected> Order by </option>
                <option value="ASC" <?php selected( $options['foo'], 'ASC' ); ?>>Oldest</option>
                <option value="DESC" <?php selected( $options['foo'], 'DESC' ); ?>>Newest</option>

            </select>
        </td>
    </tr>    
    <?php

}
add_action ( 'edit_category_form_fields', 'changePostOrder');

Пока все хорошо.Однако я хочу сохранить выбранную опцию, чтобы она отображала выбранную опцию в веб-интерфейсе.Но ничего не происходит:

function saveCategoryFields() {
    if ($_POST['post_order'] === 'Oldest')  {
        //do something and then update the field
        update_term_meta($_POST['tag_ID'], 'post_order', $_POST['post_order']); 
    }
}
add_action ( 'edited_category', 'saveCategoryFields');

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

1 Ответ

0 голосов
/ 27 сентября 2019

WordPress имеет функцию под названием add_meta_box () .Используйте это, чтобы обернуть ваше поле формы, и оно будет форматировать аргумент $ _POST при отправке страницы.

Вы подключаетесь к add_meta_boxes для вызова функции, которая вызовет add_meta_box, и в этот момент вы можете передать ей несколько аргументов.

add_action( 'add_meta_boxes', 'yourname_create_metabox' );

public function yourname_create_metabox(){
    if(is_admin()){

        add_meta_box("a-meta-box-name", "Hi! I am a meta box",  "your_metabox_markup_function", "", "", "");
    }
}

Вы оборачиваете свою форму в эту функцию your_metabox и обязательно добавляете одноразовое поле для безопасности:

public function your_metabox_markup_function(){
    global $post;

    $meta = get_post_meta($post->ID, 'post_order');
    wp_nonce_field(basename(__FILE__),'yourname_post_class_nonce');

// your form here

}

Затем вы можете сохранить форму:

public function yourname_save_metabox($post_id){


    if(!isset($_POST['yourname_post_class_nonce']) || !wp_verify_nonce($_POST['yourname_post_class_nonce'],basename(__FILE__)))return $post_id;


    if(isset( $_POST['post_order'] )){
        // save however you need
    }       
}
add_action( 'save_post',  'yourname_save_metabox', 10);
...