WooCommerce REST API 手動指定訂單金額

之前開發的使用 ACF Form 來建立 WooCommerce 訂單的功能,客戶希望增加自訂訂單金額的欄位,也就是預設用商品售價計算,或是可以自行輸入這筆訂單的金額。在 WooCommerce REST API 的官方文件範例中,並沒有提供訂單金額的參數,於是第一個直覺就是跑去問 ChatGPT,想不到反而繞了一大圈。

它給了我兩個錯誤的參數名稱,一個是 price 另一個是 _order_total,結果完全沒有作用,後來再仔細研究官方文件提供的屬性列表,才發現到在商品屬性 line_items 裡面有一個 total 的參數,才理解原來下手的方向應該是調整商品總計進而變動訂單金額:

當然,如果你有稅或是運費計算的邏輯需要處理會麻煩些,我的情況比較單純,因此只要去動商品總計即可,只要將 line_items 的 total 欄位用 ACF 取拿資料。

<?php

$woocommerce->post(
	'orders',
	array(
		'payment_method'       => '...',
		'payment_method_title' => '...',
		'billing'              => '...',
		'line_items'           => array(
			'product_id' => 1,
			'quantity'   => 1,
			'total'      => get_field( 'custom_order_total' ), // 從 ACF 取得自訂訂單金額
		),
	)
);

當用這樣的方式去改變訂單金額時,在 WooCommerce 這邊的紀錄方式是用優惠券扣掉折扣金額去符合我們自行帶入的數字,也就是說如果商品價格是 1,000 元,我的自訂訂單金額是 100 元,那麼該訂單就會自動套用 900 元的折價券。

這樣的計算方式會延伸一些問題,我踩到的雷是電子發票的開立,由於套用折價券後會算成是兩筆商品小計,但商品名稱卻只有一個,因此會發生商品名稱的資料筆數跟小計的對不起來,造成發票無法開立的問題,這部分我是直接修改電子發票外掛來解決,但根本解可能還是要請外掛開發商將優惠券的情境考慮進去才行了。

文章標籤WC REST API

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!