通过自定义字段更改购物车中的产品价格,Woocommerce
问题描述:
我目前遇到问题,必须在购物车中添加选项(对于购物车中的每件商品),这将从一个自定义属性中更改商品的价格。通过自定义字段更改购物车中的产品价格,Woocommerce
这是它的一个例证(我已经创建自定义字段,只需要价格更新功能按钮“更新购物车”被点击时)
代码为每个项目显示复选框(/ woocommerce /模板/车/ cart.php):
<td class="product-url">
<?php
$html = sprintf('<div class="lorem"><input type="checkbox" name="cart[%s][lorem]" value="%s" size="4" class="input-text url text" /> Lorem price</div>', $cart_item_key, esc_attr($values['url']));
echo $html;
?>
</td>
答
在这里,我假设lorem price
存储在与meta_key your_custom_meta_field
使用按照你的主题function.php
文件
add_action('woocommerce_before_calculate_totals', 'my_custom_calculate_totals');
function my_custom_calculate_totals($cart) {
if (! empty($cart->cart_contents)) {
$lorem_price = array();
if (! empty($_REQUEST['cart'])) { // check if any of the checkboxes is checked
WC()->session->set('my_lorem_price', $_REQUEST['cart']); // set all checkboxes information in session
$lorem_price = $_REQUEST['cart'];
}
if (empty($lorem_price)) {
$lorem_price = WC()->session->get('my_lorem_price'); // fetch all checkboxes information from session
}
if (empty($lorem_price)) {
return; // don't do anything if any of the checkboxes is not checked
}
foreach ($cart->cart_contents as $cart_item_key => $cart_item) {
if (isset($lorem_price[ $cart_item_key ]['lorem'])) {
// Use following line if lorem price is set at variation level
$id = (! empty($cart_item['variation_id']) && $cart_item['variation_id'] > 0) ? $cart_item['variation_id'] : $cart_item['product_id'];
// Use following line if lorem price is set at product level
// $id = $cart_item['product_id'];
$new_price = get_post_meta($id, 'your_custom_meta_field', true); // fetch price from custom field
$cart_item['data']->price = $new_price;
}
}
}
}
代码在等待答案我的解决方案类同这个,反正感谢,我把你的一些代码。 – harisdev