WooCommerce新版块状结账页(checkout)已将请求由wc-ajax转变为wp-json,这使得woocommerce_after_checkout_validation一众钩子彻底失效,我在使用时发现已无法使用,切换为经典页面时又能继续使用。
最终找到了购物车限制、经典结账页与块结账页的限制,可以满足具体需求。
所以应该重新找方式,找一个都能使用的方式,如果你的限制不涉及到结账表单的判断,可以用这个hook:woocommerce_check_cart_items,其实是一个购物车限制。
代码如下:
add_action('woocommerce_check_cart_items',function(){
global $woocommerce;
$buyunxu = array(21);
$cart_products_list = $woocommerce->cart->cart_contents;
foreach ($cart_products_list as $cart_a_product){//循环购物车中的产品
$cart_a_product_id = $cart_a_product["product_id"];//产品ID
$terms = get_the_terms( $cart_a_product_id, 'product_cat' );//产品的分类
foreach($terms as $term){//循环这个产品的分类
$term_id = $term->term_id;
if(in_array($term_id,$buyunxu)){
wc_add_notice( '错误', 'error' );
break 2;
}
}
}
});
如果你的限制是结账页面的下单按钮,且限制包含结账表单,那么可以用两个钩子分别进行限制,woocommerce_store_api_checkout_update_customer_from_request是块结账页的限制,而woocommerce_after_checkout_validation是经典结账页的限制,代码如下:
add_action('woocommerce_store_api_checkout_update_customer_from_request',function(){
wc_add_notice( '错误', 'error' );
});
add_action('woocommerce_after_checkout_validation',function(){
wc_add_notice( '错误', 'error' );
});
© 版权声明
文章版权归作者所有,未经允许请勿转载。
WWW.ANXKJ.TOP
暂无评论内容