【问题标题】:Disable free shipping for specific coupon codes in WooCommerce在 WooCommerce 中禁用特定优惠券代码的免费送货
【发布时间】:2023-12-22 22:00:01
【问题描述】:

当有人使用特定优惠券代码时,我正在尝试删除 Woocommerce 中的免费送货选项。我发现this question 与我的问题非常相关。下面的答案似乎真的很接近我正在寻找的东西。我是 php 新手,并试图找出在哪里为要排除的优惠券代码添加 id。

add_filter( 'woocommerce_shipping_packages', function( $packages ) {
  $applied_coupons = WC()->session->get('applied_coupons', array());

  if (!empty($applied_coupons)) {
    $free_shipping_id = 'free_shipping:2';
    unset($packages[0]['rates'][ $free_shipping_id ]);
  }

  return $packages;
});

这是我关于堆栈溢出的第一个问题,但这个网站在很多问题上帮助了我很多。如果我要求太多,请原谅我。提前感谢您的任何帮助/指导。

【问题讨论】:

  • 欢迎来到 *。请记住实际包含您明确提出的问题in your post。现在,您所说的只是您想做某事,并且找到了代码,但这并不构成问题:您想做某事并找到了代码,所以现在看起来您拥有所需的一切开始重写您发现的内容以满足您的需求,而不是在您尝试修改该代码时出现问题。 SO 可以帮助您解决编程问题,但这确实需要正确描述问题 =)
  • (请注意,* 不是一个通用的帮助论坛,“我不知道该怎么做”不是编程问题,而是技能问题,超出了 * 的范围。”我以为我知道怎么做,所以我写了这段代码:...,但不是做 Y,它似乎做 Z,即使在调试和尝试 U、V 和 W 之后,我也想不通为什么”是一个编程问题)
  • 看过developer.wordpress.org/reference/functions/add_filter 我会说你需要告诉 add_filter() 函数,你接受了多少个参数。这似乎就是为什么在您提到的问题中,标记的答案会像这样添加过滤器: add_filter( 'woocommerce_package_rates', 'coupons_removes_free_shipping', 10, 2 );

标签: php wordpress woocommerce coupon shipping-method


【解决方案1】:

改用woocommerce_package_rates 过滤钩子。在下面的代码中,您将设置隐藏免费送货方式的相关优惠券代码:

add_filter( 'woocommerce_package_rates', 'hide_free_shipping_method_based_on_coupons', 10, 2 );
function hide_free_shipping_method_based_on_coupons( $rates, $package )
{
    $coupon_codes       = array('summer'); // <== HERE set your coupon codes
    $applied_coupons    = WC()->cart->get_applied_coupons(); // Applied coupons
    
    if( empty($applied_coupons) )
        return $rates;

    // For specific applied coupon codes
    if( array_intersect($coupon_codes, $applied_coupons) ) {
        foreach ( $rates as $rate_key => $rate ) {
            // Targetting "Free shipping"
            if ( 'free_shipping' === $rate->method_id ) {
                unset($rates[$rate_key]); // hide free shipping method
            }
        }
    }
    return $rates;
}

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

清除运输缓存

  • 您需要清空购物车,以清除缓存的运输数据
  • 或者在运输设置中,您可以禁用/保存任何运输方式,然后启用返回/保存。

【讨论】:

  • 非常感谢您回复我!感谢您尝试将其放入我的 functions.php 文件夹中的帮助/见解,我收到错误“语法错误,意外“返回”(T_RETURN)”,指的是第 8 行。
  • @JoshFuller 只是缺少一个括号抱歉...已更新。
最近更新 更多