【发布时间】:2021-12-02 15:14:57
【问题描述】:
如果购物车中有某些产品并且运送到某些国家/地区,我想阻止在 WooCommerce 中结帐。因此创建了通知/错误,但将其设置为 display:none。它应该按照规则出现和消失。代码如下:
add_action( 'woocommerce_after_checkout_form', 'bbloomer_show_notice_shipping' );
function bbloomer_show_notice_shipping(){
?>
<script>
jQuery(document).ready(function($){
var countryCode = 'DE';
selectedCountry = $('select#billing_country').val();
if( selectedCountry != countryCode ){
$('.shipping-notice').show();
$('.form-row.place-order.wc-gzd-place-order').hide();
}
else {
$('.shipping-notice').hide();
$('.form-row.place-order.wc-gzd-place-order').show();
}
$('select#billing_country').change(function(){
selectedCountry = $('select#billing_country').val();
if( selectedCountry != countryCode ){
$('.shipping-notice').show();
$('.form-row.place-order.wc-gzd-place-order').hide();
}
else {
$('.shipping-notice').hide();
$('.form-row.place-order.wc-gzd-place-order').show();
}
});
});
</script>
<?php
}
?>
$('.shipping-notice').show() 和 hide() 工作正常。 隐藏和显示“立即购买”按钮几乎可以正常工作,但在页面初始加载时除外。
我怀疑 $('.form-row.place-order.wc-gzd-place-order').hide();想要完成它的工作,但该元素尚不存在。
结帐中有一个支付网关,加载时间只有几秒钟……“立即购买”按钮仅在加载完成后出现。
我该怎么做才能等到页面真正完全加载,包括所有 Ajax 等,然后隐藏按钮?
谢谢:-)
【问题讨论】:
-
从你的问题中我可以收集到它有点像the following question + the first part of my answer,所以使用 jQuery/AJAX 并不是真的必要。我还在您的代码中看到您为 WooCommerce 使用 Germanized,这是正确的吗?如果是这样,请在您的问题中提及这一点,因为答案可能会偏离默认的 WooCommerce 设置,并且答案不会对每个人都“开箱即用”
-
@7uc1f3r:感谢您的回答。我将代码更改为非德国化设置。这现在应该适用于每个人。之前:'form-row.place-order.wc-gzd-place-order' 之后:'div.place-order button#place_order'
-
@7uc1f3r:您的参考资料 (stackoverflow.com/a/69495212/11987538) 几乎就是我所需要的,谢谢。缺少的是当客户选择交货不受限制的国家/地区时订单的解锁。 (例如德国 -> 是,下订单 - 意大利 -> 否,不下订单)。
标签: button woocommerce checkout disable