WordPress-保存下拉列表选择的选项并在前端显示它

问题描述 投票:1回答:1

我为此战斗了好几天。我试图在创建或编辑帖子类别时添加带有选项的自定义下拉列表:

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()来获取值,但我不知道该怎么做。基本上,我需要与此answer类似的东西,但需要一个下拉列表。请帮助。

wordpress http-post categories
1个回答
0
投票

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函数中,并确保添加一个nonce字段以确保安全性:

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);
© www.soinside.com 2019 - 2024. All rights reserved.