Кажется, это должно быть просто, но я не могу туда добраться.
Цель: мне нужно отобразить уведомление для пользователей, когда они меняют способ доставки, если общая сумма корзины меньше требуемого предела.
Я написал функцию в файле functions.php
function min_delivery(){
//Get Chosen Shipping Method//
$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
$chosen_shipping = $chosen_methods[0];
//end method
//check if they've chosen delivery
if ($chosen_shipping == 'flat_rate:2') {
//set cart minimum
$minimum = 15.00;
//get cart total - 2.00 is the delivery fee
$total = WC()->cart->total-2.00;
// check if the total of the cart is less than the minium
if ( $total < $minimum ) {
//check if it's in the cart
if( is_cart() ) {
wc_print_notice(
sprintf( 'Minimum £15.00 for Delivery' ,
wc_price( $minimum ),
wc_price( $total )
), 'error'
);
//else at checkout
} else {
wc_add_notice(
sprintf( 'Min 15.00 for Delivery' ,
wc_price( $minimum ),
wc_price( $total )
), 'error'
);
}
}//end of total less than min
//else they have pick up
} else {
//set cart minimum
$minimum = 4.50;
//get cart total - 2.00 is the delivery fee
$total = WC()->cart->total-2.00;
if ( $total < $minimum ) {
//check if it's in the cart
if( is_cart() ) {
wc_print_notice(
sprintf( 'Minimum £15.00 for Delivery' ,
wc_price( $minimum ),
wc_price( $total )
), 'error'
);
//else at checkout
} else {
wc_add_notice(
sprintf( 'Min 15.00 for Delivery' ,
wc_price( $minimum ),
wc_price( $total )
), 'error'
);
}
}//end of total less than min
}//end pickup/delivery else
}//end function
Теперь вызов этой функции с формой before checkout прекрасно работает
add_action( 'woocommerce_before_checkout_form' , 'min_delivery' );
Однако моя проблема в том, что когда люди обновляют доставку на лету, то есть выбирают между ними. Я подумал, что будет крюк, который я мог бы использовать, например, один из этих
//add_action( 'woocommerce_checkout_process', 'min_delivery' );
//add_action( 'update_order_review' , 'min_delivery' );
//add_action( 'woocommerce_review_order_after_shipping' , 'min_delivery' );
add_action( 'woocommerce_before_checkout_form' , 'min_delivery' );
//add_action( 'woocommerce_after_checkout_shipping_form', 'min_delivery' );
//add_action('woocommerce_cart_totals_after_shipping', 'min_delivery');
Однако никто из них не выполняет эту работу. Когда я смотрю в консоль, при обновлении происходит вызов AJAX на ?wc-ajax=update_order_review
, но я не могу подключиться к этому
Я блуждаю, если я здесь ошибаюсь, и вы можете даже изменить страницу с помощью хуков и функций, как PHP уже рендерил?
В соответствии с целью весь смысл заключается в том, чтобы ограничить заказ / оплату доставки, если общая стоимость тележки составляет менее £ 15, и уведомить клиента о причине.