這個小function主要是讓商品id 156變成折扣,當我把它加入購物車時,就可以自己打金額折價,如果你是小型門市,1次只處理1張單,發票數又不多,可以用WooCommerce搭配速買配開發票
// 在購物車頁面為商品 156 添加價格修改欄位,並保存自定義價格到購物車和訂單
function custom_product_156_price_modification() {
// 顯示自定義價格輸入框
add_action('woocommerce_after_cart_item_name', function($cart_item, $cart_item_key) {
if ($cart_item['product_id'] == 156) {
$custom_price = isset($cart_item['custom_price']) ? $cart_item['custom_price'] : $cart_item['data']->get_price();
echo '<input type="number" step="0.01" name="custom_price[' . $cart_item_key . ']" value="' . esc_attr($custom_price) . '" />';
}
}, 10, 2);
// 保存自定義價格到購物車
add_action('woocommerce_before_calculate_totals', function($cart) {
if (is_admin() && !defined('DOING_AJAX')) {
return;
}
foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
if ($cart_item['product_id'] == 156 && isset($_POST['custom_price'][$cart_item_key])) {
$custom_price = floatval($_POST['custom_price'][$cart_item_key]);
// 更新購物車中的價格
$cart_item['data']->set_price($custom_price);
// 保存自定義價格到購物車項目中
WC()->cart->cart_contents[$cart_item_key]['custom_price'] = $custom_price;
} elseif (isset($cart_item['custom_price'])) {
// 在沒有修改的情況下仍確保自定義價格保留
$cart_item['data']->set_price($cart_item['custom_price']);
}
}
});
// 將自定義價格保存到訂單項目中
add_action('woocommerce_checkout_create_order_line_item', function($item, $cart_item_key, $values, $order) {
if (isset($values['custom_price'])) {
$item->update_meta_data('custom_price', $values['custom_price']);
$item->set_subtotal($values['custom_price'] * $item->get_quantity());
$item->set_total($values['custom_price'] * $item->get_quantity());
}
}, 10, 4);
}
// 呼叫此函式來啟用自定義價格修改功能
add_action('init', 'custom_product_156_price_modification');