为Woocommerce的100个第一批客户免费送货

时间:2017-08-04 14:39:52

标签: php wordpress woocommerce checkout shipping

我正试图在Woocommerce中找到一种方法,允许前100名客户免费送货作为促销活动。

一旦达到100个第一客户的限制,则将应用标准运输。

这可能吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

下面是一个简单的方法,使用下面的2个钩子函数:

  1. 自动添加优惠券代码到购物车"免运费"为首100位客户启用了选项。
  2. 隐藏其他送货方式"免费送货"可以。
  3. 但你会:

    1. 在WooCommerce>设置>运费,为每个运输区设置一个"免运费"方法并选择以下选项之一:
      • 有效的免费送货优惠券
      • 最低订购金额或优惠券
    2. 在WooCommerce>之前设置特殊优惠券代码优惠券具有以下设置:
      • 一般>折扣类型:固定购物车
      • 一般>金额:0
      • 一般>允许免费送货:已启用
      • 使用限制>每张优惠券的使用限制:100
      • 使用限制>每位用户的使用限制:1
    3. 以下是代码:

      // Auto apply "free_shipping" coupon for first hundred
      add_action( 'woocommerce_before_calculate_totals', 'auto_apply_free_shipping_coupon_first_hundred', 20, 1 );
      function auto_apply_free_shipping_coupon_first_hundred( $cart ) {
      
          // HERE define  your free shipping coupon code
          $coupon_code = 'summer';// 'freeship100';
      
          if ( is_admin() && ! defined( 'DOING_AJAX' ) )
              return;
      
          if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
              return;
      
          // Get an instance of the WC_Coupon object
          $coupon = new WC_Coupon( $coupon_code );
      
          // After 100 usages exit
          if( $coupon->get_usage_count() > 100 ) return;
      
          // Auto-apply "free shipping" coupon code
          if ( ! $cart->has_discount( $coupon_code ) && is_cart() ){
              $cart->add_discount( $coupon_code );
              wc_clear_notices();
              wc_add_notice( __('You have win Free shipping for the first 100 customers'), 'notice');
          }
      }
      
      // Hide Others Shipping methods when "Free shipping is available
      add_filter( 'woocommerce_package_rates', 'hide_others_when_free_shipping_is_available', 100 );
      function hide_others_when_free_shipping_is_available( $rates ) {
          $free = array();
          foreach ( $rates as $rate_id => $rate ) {
              if ( 'free_shipping' === $rate->method_id ) {
                  $free[ $rate_id ] = $rate;
                  break;
              }
          }
          return ! empty( $free ) ? $free : $rates;
      }
      

      代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

      此代码已经过测试,适用于WooCommerce版本3 +