При оформлении заказа объект заказа не существует до тех пор, пока клиент не нажмет "Разместить заказ", поэтому вы не можете использовать хук woocommerce_cancelled_order
, расположенный в методе cancel_order()
,
На странице оформления заказа вам нужно очистить корзину, используя вместо этого пользовательскую кнопку, и следующий код очистит корзину и перенаправит в магазин при нажатии «Отменить заказ»:
add_action( 'woocommerce_review_order_after_submit', 'checkout_reset_button', 10 );
function checkout_reset_button(){
echo '<br><br>
<a class="button alt" style="text-align:center;" href="?cancel=1">'.__("Cancel order", "woocommerce").'</a>';
}
add_action( 'template_redirect', 'checkout_reset_cart' );
function checkout_reset_cart() {
if( ! is_admin() && isset($_GET['cancel']) ) {
WC()->cart->empty_cart();
wp_redirect( get_permalink( wc_get_page_id( 'shop' ) ) );
exit();
}
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.