2016-09-26 41 views
3

在WooCommerce中,我製作了2個自定義訂單狀態。第一個是「運輸狀態」,另一個是「批准狀態」。自定義訂單狀態不會顯示在客戶我的帳戶訂單歷史記錄

將某些訂單狀態更改爲這兩個新狀態(即shippingapproved)後,客戶無法在其訂單歷史記錄頁面上查看此訂單。

這裏是我的代碼:

function register_awaiting_shipment_order_status() { 


    if('product_manager' == $get_roles || 'administrator' == $get_roles){ 
     register_post_status('wc-shipping', array(
       'label'      => 'wc-shipping', 
       'public'     => true, 
       'exclude_from_search'  => false, 
       'show_in_admin_all_list' => true, 
       'show_in_admin_status_list' => true, 
       'label_count'    => _n_noop('Shipping <span class="count">(%s)</span>', 'Shipping <span class="count">(%s)</span>') 
     )); 
    } 


    if('approver' == $get_roles || 'administrator' == $get_roles ||'product_manager' == $get_roles){ 
     register_post_status('wc-approved', array(
       'label'      => 'wc-approved', 
       'public'     => true, 
       'exclude_from_search'  => false, 
       'show_in_admin_all_list' => true, 
       'show_in_admin_status_list' => true, 
       'label_count'    => _n_noop('Approved <span class="count">(%s)</span>', 'Approved <span class="count">(%s)</span>') 
     )); 
    } 
} 

    add_action('init', 'register_awaiting_shipment_order_status'); 

但如果我更改訂單狀態回Woocommerce's默認的訂單狀態(例如「已完成」),然後客戶可以再次瀏覽了我自己的訂單歷史記錄。

我做錯了什麼?
如何使用客戶訂單歷史記錄頁上的新自定義狀態顯示新訂單?

謝謝。

回答

2

我糾正了代碼中的小錯誤。 您將需要用您的主題文本域(或slu))替代textdomain

完成並展示這個新的定製訂單狀態,還需要在其上對他們的帳戶頁面顯示客戶的訂單my_account/orders.php模板中使用wc_order_statuses過濾鉤子來註冊它們。

這是重新審視代碼:

function register_new_custom_order_statuses() { 

    if('product_manager' == $get_roles || 'administrator' == $get_roles){ 
     register_post_status('wc-shipping', array(
      'label'      => _x('Shipping', 'Order status', 'textdomain'), 
      'public'     => true, 
      'exclude_from_search'  => false, 
      'show_in_admin_all_list' => true, 
      'show_in_admin_status_list' => true, 
      'label_count'    => _n_noop('Shipping <span class="count">(%s)</span>', 'Shipping <span class="count">(%s)</span>') 
     )); 
    } 

    if('approver' == $get_roles || 'administrator' == $get_roles ||'product_manager' == $get_roles){ 
     register_post_status('wc-approved', array(
      'label'      => _x('Approved', 'Order status', 'textdomain'), 
      'public'     => true, 
      'exclude_from_search'  => false, 
      'show_in_admin_all_list' => true, 
      'show_in_admin_status_list' => true, 
      'label_count'    => _n_noop('Approved <span class="count">(%s)</span>', 'Approved <span class="count">(%s)</span>') 
     )); 
    } 
} 
add_action('init', 'register_new_custom_order_statuses'); 

// Register new statuses in wc_order_statuses (function). 
function register_new_custom_wc_order_statuses($order_statuses) { 
    $order_statuses['wc-shipping'] = _x('Shipping', 'Order status', 'textdomain'); 
    $order_statuses['wc-approved'] = _x('Approved', 'Order status', 'textdomain'); 
    return $order_statuses; 
} 
add_filter('wc_order_statuses', 'register_new_custom_wc_order_statuses'); 

此代碼放在你的活躍兒童主題(或主題)的function.php文件或也以任何插件文件。

代碼已經過測試並且功能完整。


參考文獻:

+0

對不起,我把這個背影,我在 'WC-運輸' 狀態,共3項,我可以看到一個在訂單列表上方過濾此狀態,但當我選擇「全部(10)」作爲過濾器時,只有7個itens列在admin的訂單頁面中。有沒有什麼辦法解決這一問題? –

+0

@BrunoRodrigues我沒有答案,例如......你將不得不自己搜索並嘗試一下,或者在StackOverFlow上提出一個新問題。 – LoicTheAztec

+1

我們的一位編碼員將前綴從'wc-'更改爲'qc',這是一個錯誤。這導致訂單隱藏在我的列表中。謝謝你的時間! –

相關問題