【发布时间】:2017-02-15 10:56:00
【问题描述】:
我在 Woo-commerce 网站上收到了大约 10,000 个订单。大约 0.4% 没有保存所需的自定义字段“custom_location”。我不知道这是怎么可能的,也找不到重现的方法。
另外,我使用字段的选定值将辅助值保存到数据库。即使数据库中的“custom_location”为空,辅助值也会正确保存。显然, $_POST['custom_location'] 包含有效数据,但没有保存......为什么?
// Here I create the custom select field
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields');
function custom_override_checkout_fields( $fields ) {
// <select> options
$args = array('post_type' => 'MY_CUSTOM_POST_TYPE',
'posts_per_page' => -1,
'order' => 'ASC',
'post_status' => 'publish',
'suppress_filters' => true);
$locations = get_posts($args);
$ops = array('default' => 'Select a location');
foreach($locations as $l) {
$ops[$l->ID] = __($l->post_title, 'woocommerce' );
}
// Add 'custom_location' field to 'shipping'
$fields['shipping'] = array( 'custom_location' => array(
'label' => __('Location', 'woocommerce'),
'placeholder' => _x('', 'empty', 'woocommerce'),
'required' => true,
'clear' => false,
'type' => 'select',
'options' => $ops
))
+ $fields['shipping'];
return $fields;
}
// Save related data
add_action( 'woocommerce_checkout_update_order_meta', 'save_extra_data' );
function save_extra_data( $order_id ) {
$loc = $_POST['custom_location'];
// This was saved correctly to DB even when 'custom_location' is null in DB!
$meta = get_post_meta($loc, 'extra-shipping-data', true);
update_post_meta( $order_id, '_shipping_extra', $meta );
}
【问题讨论】:
-
foreach 循环中使用的
$locations变量在哪里定义? -
我在代码中添加了 $locations 变量。这是我通过“get_posts()”获得的一系列帖子
标签: wordpress woocommerce