У меня было около 10 000 заказов на веб-сайте Woo-commerce. Около 0,4% не сохранили требуемое настраиваемое поле «custom_location». Я понятия не имею, как это возможно и не может найти способ воспроизвести.Пользовательское поле WooCommerce не сохраняется в DB ... иногда
Кроме того, я использую выбранное значение поля для сохранения вторичного значения в БД. Вторичное значение сохраняется правильно, даже когда «custom_location» имеет значение NULL в БД. Очевидно, что $ _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);
}
Где определена ваша переменная '$ locations', используемая в цикле foreach? – LoicTheAztec
Я добавил $ loc var в код. Это массив сообщений, которые я получаю через «get_posts()» –