将产品添加到购物车时,Woocommerce set_quantity使网站崩溃

时间:2018-10-09 21:34:00

标签: php wordpress woocommerce

我已经在WooCommerce中设置了自定义计算器作为新插件。

我要通过此计算器传递我的总价和总数量。价格是通过将产品的总平方英寸(一块布)乘以订购的总件数得出的。

但是我们根据总磅数来定价运输,并将其设置为0.003 / sq英寸。因此,为了正确计算运费,我需要将此信息传递给购物车。需要明确的是,我需要将布料的总平方英寸传递给购物车,然后它将在此基础上对其进行定价。

我已经使用隐藏值字段和以下代码将数量和价格添加到购物车:

add_action( 'woocommerce_add_cart_item_data', 'save_custom_fields_data_to_cart', 10, 2 );
function save_custom_fields_data_to_cart( $cart_item_data, $product_id ) {

    if( ! empty( $_REQUEST['custom_price'] && $_REQUEST['custom_quantity'] ) ) {
        // Set the custom data in the cart item
        if($_REQUEST['custom_price'] < 25) {
            $cart_item_data['custom_price'] = 25.00;
        } else {
            $cart_item_data['custom_price'] = $_REQUEST['custom_price'];
        }
        // Set the custom data in the cart item
        $cart_item_data['custom_quantity'] = $_REQUEST['custom_quantity'];
        // Make each item as a unique separated cart item
        $cart_item_data['unique_key'] = md5( microtime().rand() );
    }
    return $cart_item_data;
}

但是我遇到了以下代码的问题:

add_action( 'woocommerce_before_calculate_totals', 'change_cart_item_price', 30, 1 );
function change_cart_item_price( $cart ) {
    if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) )
        return;

    // Loop through cart items
    foreach ( $cart->get_cart() as $cart_item ) {
        // Set the new price
        if( isset($cart_item['custom_price']) ){
            $cart_item['data']->set_price($cart_item['custom_price']);
        }
        //set the new quantity
        if( isset($cart_item['custom_quantity']) ) {
            $cart_item['data']->set_quantity($cart_item['custom_quantity']);
        }
    }
}

价格还算可以,但是当代码如下时:

if( isset($cart_item['custom_quantity']) ) {
                $cart_item['data']->set_quantity($cart_item['custom_quantity']);
            }

它失败并导致站点崩溃。具体来说,

$cart_item['data']->set_quantity($cart_item['custom_quantity']);

我之所以知道这一点,是因为我在该位置快速运行了echo "good",并且一切顺利。

我误用了set_quantity吗?

0 个答案:

没有答案