我已经设法通过在本地pickup plus插件上进行一些编辑来做到这一点,如果有人需要的话:
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;
}
}