Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 向代码段添加附加检查_Php_Wordpress_Woocommerce_Hook Woocommerce - Fatal编程技术网

Php 向代码段添加附加检查

Php 向代码段添加附加检查,php,wordpress,woocommerce,hook-woocommerce,Php,Wordpress,Woocommerce,Hook Woocommerce,下面是我的代码,它可以工作,但还没有完全完成。目前,它只是检查购物车中添加的产品是否具有techshipping类别,然后应用静态5美元折扣。然而,我想要达到的是增加一个额外的要求。 我网站上的大多数产品都没有设置发货类别,其余的都设置了“技术发货类别”。我想做以下工作: 只有当客户添加一个或多个(无所谓)没有指定装运类别的产品时,才应给予5美元的折扣。如果购物车中只有tech shipping class项目,则不应提供折扣。如果产品没有设定类别和tech shipping class,无论商

下面是我的代码,它可以工作,但还没有完全完成。目前,它只是检查购物车中添加的产品是否具有
tech
shipping类别,然后应用静态5美元折扣。然而,我想要达到的是增加一个额外的要求。 我网站上的大多数产品都没有设置发货类别,其余的都设置了“技术发货类别”。我想做以下工作:

只有当客户添加一个或多个(无所谓)没有指定装运类别的产品时,才应给予5美元的折扣。如果购物车中只有
tech shipping class
项目,则不应提供折扣。如果产品没有设定类别和
tech shipping class
,无论商品数量如何,都可以享受5美元的静态折扣

我似乎不清楚如何检查购物车是否有其他物品,更具体地说,是带有
未设置类别的物品
+
技术装运类别
,然后应用该折扣。。 非常感谢您的帮助。谢谢

add_filter( 'woocommerce_package_rates', 'adjustment_in_rates_of_product_with_shipping_class', 12, 2 );

function adjustment_in_rates_of_product_with_shipping_class( $available_shipping_methods, $package ) {

   // Shipping class slug to be eligible for a discount
    $shipping_class = array(
        'tech',
    );

   // Discount
    $discount = 5;

    // Enter the Shipping Method Value
    $shipping_services = array(
       'flat_rate:2',
    );

    $shipping_class_exists = false;
    foreach(WC()->cart->get_cart_contents() as $key => $values) {
        if ( in_array($values['data']->get_shipping_class() , $shipping_class) ) {
            $shipping_class_exists = true;
            break;
        }
    }

    if ($shipping_class_exists) {
        foreach ($available_shipping_methods as $key => $value) {
            if ( in_array($value->get_id() , $shipping_services) ) {
                $available_shipping_methods[$key]->cost -= $discount;
            }
        }
    }

    return $available_shipping_methods;
}
替换这个

if ( in_array($values['data']->get_shipping_class() , $shipping_class) )
为了


我认为,通过此修改,您的代码将检查购物车中是否至少有一种产品没有装运类别,并且在这种情况下应用折扣。

没错,但它不会检查购物车中是否至少有一种产品没有配送类别,另一种产品具有指定的配送类别
tech
。如果购物车中有一种产品具有tech配送类别,而另一种产品没有配送类别,该怎么办?我这样问是因为从我对你的问题的理解来看,只要有没有交货类别的产品,折扣就必须适用。另一方面,如果购物车只有shipping类别的产品,则不应应用折扣,并且根据我建议的修改,将发生这种行为。
if ( $values['data']->get_shipping_class() == '' )