Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在post中保存和显示更新的自定义多选下拉列表字段_Javascript_Php_Jquery_Wordpress_Woocommerce - Fatal编程技术网

Javascript 无法在post中保存和显示更新的自定义多选下拉列表字段

Javascript 无法在post中保存和显示更新的自定义多选下拉列表字段,javascript,php,jquery,wordpress,woocommerce,Javascript,Php,Jquery,Wordpress,Woocommerce,我在woocommerce shop_订单页面中显示了一个自定义多选下拉列表。select2多下拉菜单工作正常,可正确显示字段。但我还想保存更新按钮上的选定字段,一旦页面重新加载,它将不会在框中显示以前保存的字段。这是我的密码 add_action( 'admin_menu', 'rudr_metabox_for_select2' ); function rudr_metabox_for_select2() { add_meta_box( 'rudr_select2', 'Stock D

我在woocommerce shop_订单页面中显示了一个自定义多选下拉列表。select2多下拉菜单工作正常,可正确显示字段。但我还想保存更新按钮上的选定字段,一旦页面重新加载,它将不会在框中显示以前保存的字段。这是我的密码


add_action( 'admin_menu', 'rudr_metabox_for_select2' ); 
function rudr_metabox_for_select2() {
  add_meta_box( 'rudr_select2', 'Stock Details', 'rudr_display_select2_metabox', 'shop_order', 'side', 'default' );
}

function rudr_display_select2_metabox( $post_object ) {
  global $wpdb;
?>

<select data-placeholder="Select item..." id="rudr_select2_tags" name="rudr_select2_tags" multiple="multiple" class="chosen-select" style="width: 100% !important">
        <option value=""></option>
        <?php
        $table = $wpdb->prefix.'dvs_stock_details';
        $rows = $wpdb->get_results("SELECT * FROM {$table} ORDER BY item ASC");
        foreach($rows as $row){
            echo "<option value='strtolower($row->item)'>$row->item</option>";
        }
        ?>
    </select>
<?php
}
 
 
add_action( 'save_post', 'rudr_save_metaboxdata', 10, 2 ); 
function rudr_save_metaboxdata( $post_id, $post ) {
 
  if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return $post_id;
 
  if ( $post->post_type == 'shop_order' ) {
    if( isset( $_POST['rudr_select2_tags'] ) )
      update_post_meta( $post_id, 'rudr_select2_tags', $_POST['rudr_select2_tags'] );
    else
      delete_post_meta( $post_id, 'rudr_select2_tags' );
  }
  return $post_id;
}


add_action( 'admin_enqueue_scripts', 'rudr_select2_enqueue' );
function rudr_select2_enqueue(){
  wp_enqueue_style('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css' );
  wp_enqueue_script('select2', 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js', array('jquery') );
  wp_enqueue_script('mycustom', get_stylesheet_directory_uri() . '/mycustom.js', array( 'jquery', 'select2' ) ); 
}

添加操作('admin_menu'、'rudr_metabox_for_select2');
函数rudr\u metabox\u用于\u select2(){
添加元框('rudr\u select2'、'Stock Details'、'rudr\u display\u select2\u metabox'、'shop\u order'、'side'、'default');
}
函数rudr\u display\u select2\u元盒($post\u对象){
全球$wpdb;
?>

您的代码中有几处出错

将此
name=“rudr\u select2\u标签”
更改为此
name=“rudr\u select2\u标签[]”
因此,您可以在服务器中以数组的形式获取数据

像这样修改
rudr\u save\u metaboxdata
函数

add_action( 'save_post', 'rudr_save_metaboxdata', 10, 2 );
function rudr_save_metaboxdata( $post_id, $post ) {
    if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
        return $post_id;
    } 
    if( $post->post_type == 'shop_order' ) {
        if( isset( $_POST['rudr_select2_tags'] ) ) {
            $stock_data = $_POST['rudr_select2_tags'];
            if( !empty( $stock_data ) ) {
                $stock_data = array_map( 'sanitize_text_field', $stock_data ); 
                update_post_meta( $post_id, 'rudr_select2_tags', $stock_data );
            }
        }
    }

    return $post_id;
}
function rudr_display_select2_metabox( $post_object ) {
  global $wpdb;
?>

    <select data-placeholder="Select item..." id="rudr_select2_tags" name="rudr_select2_tags[]" multiple="multiple" class="chosen-select" style="width: 100% !important">
        <?php
        $table = $wpdb->prefix.'dvs_stock_details';
        $rows = $wpdb->get_results("SELECT * FROM {$table} ORDER BY item ASC");

        // get current item
        $current_item = get_post_meta( $post_object->ID, 'rudr_select2_tags', true );
      
        foreach($rows as $row){
            if( !empty( $current_item ) && in_array( $row->item, $current_item ) ) {
                echo '<option value="'. $row->item .'" selected>'.$row->item.'</option>';
            } else {
                echo '<option value="'. $row->item .'">'.$row->item.'</option>';
            }
        }
        ?>
    </select>
<?php
}
为了获得更好的安全性,您可以在数据库中保存数据时使用

然后像这样修改
rudr\u display\u select2\u metabox
函数

add_action( 'save_post', 'rudr_save_metaboxdata', 10, 2 );
function rudr_save_metaboxdata( $post_id, $post ) {
    if( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
        return $post_id;
    } 
    if( $post->post_type == 'shop_order' ) {
        if( isset( $_POST['rudr_select2_tags'] ) ) {
            $stock_data = $_POST['rudr_select2_tags'];
            if( !empty( $stock_data ) ) {
                $stock_data = array_map( 'sanitize_text_field', $stock_data ); 
                update_post_meta( $post_id, 'rudr_select2_tags', $stock_data );
            }
        }
    }

    return $post_id;
}
function rudr_display_select2_metabox( $post_object ) {
  global $wpdb;
?>

    <select data-placeholder="Select item..." id="rudr_select2_tags" name="rudr_select2_tags[]" multiple="multiple" class="chosen-select" style="width: 100% !important">
        <?php
        $table = $wpdb->prefix.'dvs_stock_details';
        $rows = $wpdb->get_results("SELECT * FROM {$table} ORDER BY item ASC");

        // get current item
        $current_item = get_post_meta( $post_object->ID, 'rudr_select2_tags', true );
      
        foreach($rows as $row){
            if( !empty( $current_item ) && in_array( $row->item, $current_item ) ) {
                echo '<option value="'. $row->item .'" selected>'.$row->item.'</option>';
            } else {
                echo '<option value="'. $row->item .'">'.$row->item.'</option>';
            }
        }
        ?>
    </select>
<?php
}
function rudr\u display\u select2\u metabox($post\u object){
全球$wpdb;
?>