Если флажок установлен, отображаются поля доставки, а расчеты основаны на адресе доставки. Это работает так, как и ожидалось.
Однако, если флажок снят, WooCommerce автоматически устанавливает поля доставки в соответствии с полями выставления счета. Я хочу предотвратить такое поведение.
Чего я хочу достичь:
Отображать поля доставки независимо от того, установлен ли флажок или нет.
Сохранять поля выставления счета и доставки полностью независимыми.
Убедитесь, что все расчеты основаны исключительно на полях доставки, даже если флажок снят.
Что я пробовал:
Я пробовал следующие решения:
Использовал Фильтр woocommerce_checkout_posted_data для очистки полей платежа, если флажок снят:
Код: Выделить всё
add_filter('woocommerce_checkout_posted_data', 'force_shipping_fields_only');
function force_shipping_fields_only($data) {
if (isset($data['ship_to_different_address']) && !$data['ship_to_different_address']) {
foreach ($data as $key => $value) {
if (strpos($key, 'billing_') !== false) {
$data[$key] = ''; // Clear billing fields
}
}
}
return $data;
}
Попытался переопределить данные клиента в woocommerce_checkout_update_order_review:
Код: Выделить всё
add_action('woocommerce_checkout_update_order_review', 'force_shipping_only_calculation');
function force_shipping_only_calculation($posted_data) {
WC()->customer->set_shipping_country($posted_data['shipping_country']);
WC()->customer->set_shipping_state($posted_data['shipping_state']);
// And so on for other fields...
}
Ожидаемое поведение:
Когда флажок снят:Поля доставки должны оставаться доступными для редактирования и не перезаписываться платежными данными.
Расчеты всегда должны основываться на полях доставки.
Фактическое поведение:
Когда флажок установлен снято:
Поля доставки перезаписываются платежными данными.
WooCommerce игнорирует независимые поля доставки.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-when-sh