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