мне удалось сделать это с помощью редактирования немного на локальном пикап плюс плагин, вот если кто-то нуждается в нем:
if (localPickupPlusOnly && ! $('#ship-to-different-address-checkbox').prop('checked')) {
// only local pickup plus is being used, hide the shipping address fields
$('#shiptobilling, #ship-to-different-address').hide();
$('#delivery_datetime_field').show();
$('#shiptobilling, #ship-to-different-address').parent().find('h3').hide();
$('.shipping_address').hide();
} else {
// some other shipping method is being used, show the shipping address fields
$('#shiptobilling, #ship-to-different-address').show();
$('#delivery_datetime_field').hide();
$('#shiptobilling, #ship-to-different-address').parent().find('h3').show();
if (($('#shiptobilling input').length > 0 && ! $('#shiptobilling input').is(':checked')) || $('#ship-to-different-address input').is(':checked')) {
$('.shipping_address').show();
}
}
Единственная проблема в настоящее время является то, что, хотя скрытый, не будет проверка, если delivery_datetime_field
включен как обязательное поле. Я хочу, чтобы это поле было необходимо, если в кассе выбран местный пикап.
Если кто-то ищет решение:
add_filter('woocommerce_checkout_fields', 'local_pickup_disable');
function local_pickup_disable($local_pickup) {
global $woocommerce;
$chosen_methods = WC()->session->get('chosen_shipping_methods');
$chosen_shipping = $chosen_methods[0];
if($chosen_shipping == 'local_pickup_plus') {
/**
* Process the local_pickup checkout
*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_local_pickup_process');
function my_custom_checkout_local_pickup_process() {
// Check if set, if its not set add an error.
if (! $_POST['delivery_datetime'])
wc_add_notice(__('Please let us know when you plan to pick up your order by selecting a collection date.'), 'error');
else
/**
* Update the order meta with Pick Up question
**/
add_action('woocommerce_checkout_update_order_meta', 'my_pickup_field_update_order_meta', 10, 2);
function my_pickup_field_update_order_meta($order_id, $posted) {
if ($_POST['delivery_datetime']) {
update_post_meta($order_id, '_e_deliverydate', esc_attr($_POST['delivery_datetime']));
}
}
/**
* Add the Pick Up custom fields to order emails
**/
add_filter('woocommerce_email_order_meta_keys', 'my_pickup_checkout_field_order_meta_keys');
function my_pickup_checkout_field_order_meta_keys($keys) {
$label_name = __("Pick Up Date","delivery_datetime");
$keys[$label_name] = "Pick Up Date";
return $keys;
}
}
Проблема эта строка: 'если ($ chosen_methods [0] == 'shipping_method_0_local_pickup_plus') {' как '$ chosen_methods' не определен ... – LoicTheAztec