【发布时间】:2019-04-23 09:06:56
【问题描述】:
我正在创造尺寸和重量差异很大的产品。我没有使用 WooCommerce 产品变体来帮助我解决这个问题,因为我的产品是高度定制的。我正在使用第三方插件从许多变体选项中进行选择,并且我计划检查这些选项以确定产品重量。
问题是我想在将产品添加到购物车之前设置产品重量。然后,购物车上的运费计算器将根据您购物车的总重量计算您的运费(WooCommerce 基于重量的运费)。
我已经非常广泛地尝试了 2 个 WooCommerce 钩子来做到这一点,但没有运气。
add_filter( 'woocommerce_add_cart_item_data', 'update_weight_on_add_to_cart', 10, 3);
和
add_action( 'woocommerce_add_to_cart', 'update_weight_on_add_to_cart', 10, 6 );
我可以使用 add_filter 设置自定义字段。这样做我可以看到我成功地将产品重量设置为新的。但是一旦我进入购物车页面,重量就会恢复到编辑产品页面上设置的重量。
这是我目前用来检查的功能:
function update_weight_on_add_to_cart( $cart_item_data, $product_id, $variation_id )
{
$product = wc_get_product( $product_id );
$weight1 = $product->get_weight();
$product->set_weight(3.45);
$weight2 = $product->get_weight();
$cart_item_data['weight1'] = $weight1;
$cart_item_data['weight2'] = $weight2;
return $cart_item_data;
}
然后我在购物车上显示这些字段,看看我是否使用以下钩子和函数成功更改了数据。 (我从博客文章或其他 StackOverflow 文章中获取了大部分内容)
add_filter( 'woocommerce_get_item_data', 'display_weight', 10, 2 );
function display_weight( $item_data, $cart_item ) {
$item_id = $cart_item['variation_id'];
if($item_id == 0) $item_id = $cart_item['product_id'];
$product_qty = $cart_item['quantity'];
$product = wc_get_product($item_id);
$weight3 = $product->get_weight();
$item_data[] = array(
'key' => __('Weight3', 'woocommerce'),
'value' => wc_clean( $weight3 ),
'display' => ''
);
$item_data[] = array(
'key' => __( 'Weight1', 'woocommerce' ),
'value' => wc_clean( $cart_item['weight1'] ),
'display' => ''
);
$item_data[] = array(
'key' => __( 'Weight2', 'woocommerce' ),
'value' => wc_clean( $cart_item['weight2'] ),
'display' => ''
);
return $item_data;
}
我最近使用上述代码的努力在购物车页面上产生了以下结果。
权重3: 1
重量1: 1
体重2: 3.45
任何帮助将不胜感激!如果不能以这种方式完成,有没有更好的方法来解决这个问题?也许这需要在购物车上完成?
【问题讨论】:
标签: php wordpress woocommerce properties cart