Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在WooCommerce中禁用特定优惠券代码的免费配送_Php_Wordpress_Woocommerce_Coupon_Shipping Method - Fatal编程技术网

Php 在WooCommerce中禁用特定优惠券代码的免费配送

Php 在WooCommerce中禁用特定优惠券代码的免费配送,php,wordpress,woocommerce,coupon,shipping-method,Php,Wordpress,Woocommerce,Coupon,Shipping Method,当有人使用特定的优惠券代码时,我试图删除Woocommerce中的免费送货选项。我发现这与我的问题非常相关。下面的答案似乎真的很接近我所寻找的。我是php新手,正在尝试为我想要排除的优惠券代码添加id add_filter( 'woocommerce_shipping_packages', function( $packages ) { $applied_coupons = WC()->session->get('applied_coupons', array()); if

当有人使用特定的优惠券代码时,我试图删除Woocommerce中的免费送货选项。我发现这与我的问题非常相关。下面的答案似乎真的很接近我所寻找的。我是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;
});

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

改用
woocommerce\u package\u rates
filter hook。在下面的代码中,您将设置隐藏免费送货方式的相关优惠券代码:

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;
}
add_filter('woocommerce_package_rates','hide_free_shipping_method_based_on_coups',10,2);
功能隐藏免费送货方式基于优惠券($rates,$package)
{
$优惠券代码=数组('summer');//购物车->获取应用的优惠券();//应用的优惠券
如果(空($U优惠券))
返回美元汇率;
//适用于特定的优惠券代码
if(数组相交($优惠券代码,$applicated\u优惠券)){
foreach($rate作为$rate\u key=>$rate的费率){
//以“免费送货”为目标
如果('free_shipping'=$rate->method_id){
取消设置($rates[$rate_key]);//隐藏免费送货方式
}
}
}
返回美元汇率;
}
代码进入活动子主题(或活动主题)的functions.php文件。测试和工作

清除装运缓存

  • 您需要清空购物车,以清除缓存的配送数据
  • 或者在“配送设置”中,您可以禁用/保存任何配送方法,然后启用“退回/保存”

欢迎来到Stackoverflow。请记住要明确地包括你的问题。现在,你所说的是你想做些什么,你找到了代码,但这并不构成问题:你想做些什么,找到了代码,所以现在看起来你已经具备了一切,可以开始重写你发现的东西,以满足你的需要,而不是因为你已经尝试去修改代码而出现问题。这里是为了帮助您解决编程问题,但这确实需要正确描述问题=)(请注意,Stackoverflow不是一个通用的帮助论坛,“我不知道如何做到这一点”不是一个编程问题,而是一个技能问题,超出了Stackoverflow的范围。“我以为我知道怎么做,所以我写了这段代码:…,但不是做Y,而是做Z,即使在调试和尝试U、V和W之后,我也不明白为什么”是编程问题)看了之后,我会说你需要告诉add_filter()函数,你接受了多少个参数。这似乎就是为什么在你提到的问题中,标记的答案添加了如下过滤器:添加过滤器(“woocommerce\u package\u rates”、“优惠券\u Remove\u free\u shipping”,10,2);非常感谢您回复我!我非常感谢您的帮助/见解,试图将其放在我的functions.php文件夹中,我收到了错误“语法错误,意外的“返回”(T_return)”,指的是第8行。@JoshFuller只是缺少一个括号,抱歉…已更新。