原本以為是十分鐘就搞定的功能想不到被搞了五十分鐘,主要是卡在註冊文章狀態後少了一個環節。首先 WooCommerce 的訂單狀態是用 Post Status 來做的,套用到 WordPress 本身就是文章的發佈狀態,就是草稿、待審核、已發佈等等,由於訂單也是一種 Post Type,所以在勾點 init
使用 register_post_status()
來新增:
<?php
add_action(
'init',
function() {
register_post_status(
'wc-deliver',
array(
'label' => '配送中',
)
);
}
)
該方法帶兩個參數,第一個是訂單狀態的代稱,第二個是屬性陣列,裡面的 label
是新的訂單狀態顯示名稱,其他參數皆採用預設值即可,結果我在訂單編輯頁一直找不到新的訂單狀態,反覆檢查文件以及看其他外掛的寫法都是這樣沒錯,問了 ChatGPT 也是給我一樣的寫法,但就是無法新增成功。
後來看了另一位大大寫的程式碼,才發現我少了關鍵的一段:在註冊 Post Status 的時候我就在想,參數裡面沒提供 Post Type 的指定,我要怎麼讓 WordPress 知道這個狀態是用在訂單上面而非一般文章,於是才找到常看到的勾點 wc_order_statuses
,有這個 Filter 才可以把這個狀態指定到訂單上面:
<?php
add_filter(
'wc_order_statuses',
function( $statuses ) {
$order_statuses['wc-deliver'] = '配送中';
return $order_statuses;
}
)