我有一个特别的项目,我不希望运往海外。其他一切都很好。我已经为它创建了一个送货类,当它被添加到购物车中时,它没有添加送货,并且按钮不让客户付款。所以,所有这些都是在伍尔商业的开箱即用。问题是,当一个海外的人想要购买多个项目,其中一个碰巧是一个,我没有船到海外。它仍然把它添加到购物车总数中,尽管它说它不会被运送!见截图
我在下面找到了代码片段,我认为这在某种程度上是我所需要的概念,但是这个代码段删除了一个传送方法。我不是PHP开发人员或Wordpress Codex开发人员。我是一个前端开发/设计师。所以,请温柔的lol我知道我不想加载我的网站与插件的事情这么简单。
简单地说,我只是需要购物车删除任何项目,没有运输方法,从总数。所以,在我的例子中,总金额是59美元(55美元+4美元)。这45美元的物品因不能装运而被从总数中扣除
add_filter( 'woocommerce_package_rates', 'bbloomer_hide_free_shipping_for_shipping_class', 9999, 2 );
function bbloomer_hide_free_shipping_for_shipping_class( $rates, $package ) {
$shipping_class_target = 15; // shipping class ID (to find it, see screenshot below)
$in_cart = false;
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
if ( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
}
}
if ( $in_cart ) {
unset( $rates['free_shipping:8'] ); // shipping method with ID (to find it, see screenshot below)
}
return $rates;
}
发布于 2022-07-18 20:18:19
使用woocommerce_package_rates
钩子,因为它是在用户输入他们的发货详细信息之后调用的,这就是如何检查它是否是海外送货。此代码还将检查每个购物车项目,以及它是否有特定的运输类段塞。如果两者都签出,那么它将从购物车中删除项目并向用户显示通知。代码进入主题functions.php
。
add_filter( 'woocommerce_package_rates', 'remove_product_from_cart', 10, 2 );
function remove_product_from_cart($rates, $package) {
foreach( WC()->cart->get_cart() as $key => $item ){
$product = wc_get_product( $item['product_id'] );
$product_name = $product->get_title();
$is_prohibited_product = 'your-shipping-class-slug-here' === $product->get_shipping_class();
$is_shipping_overseas = 'US' !== WC()->customer->get_shipping_country();
if( $is_prohibited_product && $is_shipping_overseas ){
WC()->cart->remove_cart_item($key);
wc_add_notice( __( "{$product_name} has been removed from cart because we can't ship that overseas.", 'theme_domain' ), 'error' );
}
}
return $rates;
}
发布于 2022-07-17 05:05:26
首先,找到您唯一的“配送类id”,如果没有,从this question best answer中描述的说明中找出它是什么。
然后,您可以使用这样的方法从购物车中删除该产品(function.php
中的脚本放在下面):
add_action( 'woocommerce_before_checkout', 'remove_product_from_cart' );
add_action( 'woocommerce_before_cart', 'remove_product_from_cart' );
add_action( 'template_redirect', 'remove_product_from_cart' );
function remove_product_from_cart() {
if ( is_admin() ) return;
$shipping_class_target = 15; // the id 15 is an example from what you find in prev step
foreach ( WC()->cart->get_cart_contents() as $key => $values ) {
if ( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$product_id = $values['product_id'];
$product_cart_id = WC()->cart->generate_cart_id( $product_id );
$cart_item_key = WC()->cart->find_product_in_cart( $product_cart_id );
if ( $cart_item_key ) WC()->cart->remove_cart_item( $cart_item_key );
}
}
}
https://stackoverflow.com/questions/72984823
复制相似问题