首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在woocommerce结帐中取消没有发货类的产品?

如何在woocommerce结帐中取消没有发货类的产品?
EN

Stack Overflow用户
提问于 2022-07-14 17:58:47
回答 2查看 111关注 0票数 0

我有一个特别的项目,我不希望运往海外。其他一切都很好。我已经为它创建了一个送货类,当它被添加到购物车中时,它没有添加送货,并且按钮不让客户付款。所以,所有这些都是在伍尔商业的开箱即用。问题是,当一个海外的人想要购买多个项目,其中一个碰巧是一个,我没有船到海外。它仍然把它添加到购物车总数中,尽管它说它不会被运送!见截图

我在下面找到了代码片段,我认为这在某种程度上是我所需要的概念,但是这个代码段删除了一个传送方法。我不是PHP开发人员或Wordpress Codex开发人员。我是一个前端开发/设计师。所以,请温柔的lol我知道我不想加载我的网站与插件的事情这么简单。

简单地说,我只是需要购物车删除任何项目,没有运输方法,从总数。所以,在我的例子中,总金额是59美元(55美元+4美元)。这45美元的物品因不能装运而被从总数中扣除

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-18 20:18:19

使用woocommerce_package_rates钩子,因为它是在用户输入他们的发货详细信息之后调用的,这就是如何检查它是否是海外送货。此代码还将检查每个购物车项目,以及它是否有特定的运输类段塞。如果两者都签出,那么它将从购物车中删除项目并向用户显示通知。代码进入主题functions.php

代码语言:javascript
运行
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2022-07-17 05:05:26

首先,找到您唯一的“配送类id”,如果没有,从this question best answer中描述的说明中找出它是什么。

然后,您可以使用这样的方法从购物车中删除该产品(function.php中的脚本放在下面):

代码语言:javascript
运行
复制
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 );   
        }
         

     } 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72984823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档