本篇文章更新時間:2023/03/27
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
今天剛好有客戶問到「為什麼這個月某一天的銷售報表金額計算有誤」,心想應該只是哪裡誤解了。
於是調出該日的所有訂單,對比營業額,發現的確與「理想」中的數字有落差。
但很明顯的可以看出來,其實主要就是客戶沒把完成的訂單,改狀態回「完成」,導致不在預設的報表計算條件之內。
那預設是用什麼訂單狀態才會納入統計?
目前這塊還沒有設定的介面可以控制,全部都是寫在程式碼中。 WooCommerce v7.4.1
(寫文當前最新)預設是 completed
「完成」、 processing
「處理中」 與 on-hold
「保留」。
程式定義的勾點:
$order_status = apply_filters( 'woocommerce_reports_order_statuses', $order_status );
其中,又以 completed
「完成」、 processing
「處理中」這兩個狀態預設為「有付費」的狀態分類。
程式中有定義的方法與勾點來呼叫:
/**
* Get list of statuses which are consider 'paid'.
*
* @since 3.0.0
* @return array
*/
function wc_get_is_paid_statuses() {
return apply_filters( 'woocommerce_order_is_paid_statuses', array( 'processing', 'completed' ) );
}
透過勾點加入客製化的訂單狀態進入銷售統計報表
知道上述的預設設定後,除了原本的設計外,其他因為配合金流或是物流去定義過的新狀態也希望能加入銷售報表統計的話,可以透過下方程式碼片段的勾點來補充。
function mxp_woocommerce_reports_order_statuses($order_status) {
$order_status[] = '客製化訂單狀態';
return $order_status;
}
add_filter('woocommerce_reports_order_statuses', 'mxp_woocommerce_reports_order_statuses', 11, 1);
如果針對這個新的客製化訂單狀態也想加入「已付費」的狀態概念,就可以補下方的程式碼片段:
function mxp_woocommerce_order_is_paid_statuses($order_status) {
$order_status[] = '客製化訂單狀態';
return $order_status;
}
add_filter('woocommerce_order_is_paid_statuses', 'mxp_woocommerce_order_is_paid_statuses', 11, 1);
後記
訂單狀態預設的幾個狀態:
/**
* Get all order statuses.
*
* @since 2.2
* @used-by WC_Order::set_status
* @return array
*/
function wc_get_order_statuses() {
$order_statuses = array(
'wc-pending' => _x( 'Pending payment', 'Order status', 'woocommerce' ),
'wc-processing' => _x( 'Processing', 'Order status', 'woocommerce' ),
'wc-on-hold' => _x( 'On hold', 'Order status', 'woocommerce' ),
'wc-completed' => _x( 'Completed', 'Order status', 'woocommerce' ),
'wc-cancelled' => _x( 'Cancelled', 'Order status', 'woocommerce' ),
'wc-refunded' => _x( 'Refunded', 'Order status', 'woocommerce' ),
'wc-failed' => _x( 'Failed', 'Order status', 'woocommerce' ),
);
return apply_filters( 'wc_order_statuses', $order_statuses );
}
從等待付款
、處理中
、保留
、完成
、取消
、退款
與失敗
,整體來說真的算滿夠用,但為什麼還會延伸出客製化狀態?
真的是因為金物流外掛以及使用者對於這些狀態的「定義」不太一樣。導致狀態與其沿用預設,不如自己建立過一個新的來描述。
例如,金流外掛這邊確認收到錢後不是使用「處理中」而是「保留」,寄送貨品時,物流與金流一起使用「處理中」又覺得會分不清楚等問題,導致乾脆就建立過一個「寄送中」的狀態的情境。
這篇筆記要注意的就是如果訂單狀態是客製化處理,沒有列入銷售報表統計的列表的話,就會導致報表不夠精準。
當然自己把訂單匯出後自己處理報表也不是不行,端看開發者或是經營者的喜好了。