我已经在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
吗?