运行代码时在网站上出现500错误

时间:2017-07-20 19:07:26

标签: php wordpress woocommerce cart product

我尝试编写代码,以便在用户尝试更改产品数量时动态更改产品价格。将代码放入函数文件后,我的网站上出现500错误,我的网站无法访问。有人可以检查一下我做错了吗。

function return_custom_price($price, $product) {       
    $product =wc_get_product( $post->ID );
    //global $post, $woocommerce;

    $price = get_post_meta($product->id, '_price', true);

    global $woocommerce;
    $items = $woocommerce->cart->get_cart();

    foreach ($items as $cart_item_key => $values) {

        $quantity = $values['quantity'];
        $cartProduct = $values['data'];

        if ($quantity < 10) 
            return $price;

        // do the ranges
        if ($quantity >= 10 && $quantity <= 24)
            return $product->get_attribute('10-24');

        if ($quantity >= 25 && $quantity <= 49)
            return $product->get_attribute('25-49');

        if ($quantity >= 50) // originally 50-99
            return $product->get_attribute('50-99');

        /* 
        if ($quantity >= 100 && $quantity <= 249)
            return $product->get_attribute('100-249');

        if ($quantity >= 250 && $quantity <= 499)
            return $product->get_attribute('250-499');

        if ($quantity >= 500 && $quantity <= 999)
            return $product->get_attribute('500-999');

        if ($quantity >= 1000 && $quantity <= 2499)
            return $product->get_attribute('1000-2499');

        if ($quantity >= 2500)
            return $product->get_attribute('2500');
         */

    }
    return $price;
}      
if (!is_admin() || (defined('DOING_AJAX') && DOING_AJAX)) {
    add_filter('woocommerce_get_price', 'return_custom_price', $product, 2);
}

1 个答案:

答案 0 :(得分:1)

钩子 woocommerce_get_price 在WooCommerce 3+中已弃用,取而代之的是 woocommerce_product_get_price

您的代码中存在许多错误:您不需要获取 $product WC_Product 对象),因为它已经是函数中的参数...您可以从 $product 对象中获取价格......

所以正确的代码是:

add_filter('woocommerce_product_get_price ', 'return_custom_price', 10, 2);
function return_custom_price( $price, $product ){

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    // $product object already exist as it's an argument in this hooked function

    // Get the current product price
    $price = method_exists( $product, 'get_price' ) ? $product->get_price() : $product->price;

    // Iterating though each cart items
    foreach (WC()->cart->get_cart() as $cart_item) {

        // Product quatity of the cart items
        $qty = $cart_item['quantity'];

        if ($qty > 50)
            $price = $product->get_attribute('50-99');
        elseif ($qty >= 25 && $qty < 50)
            $price = $product->get_attribute('25-49');
        elseif ($qty >= 10 && $qty < 25)
            $price = $product->get_attribute('10-24');
    }
    return $price;
}
  

但是这段代码不符合您的期望:

     

因为它会检查每个购物车商品(但不包括您当前的商品),这意味着您将获得许多不同的数量(与每个购物车商品相关),但不适用于您的产品,因为它尚未添加到购物车中。多次退货的价格相同(对于每个购物车商品)......

基于产品数量的动态定价是一个真正的发展。

现有的插件就像: