2016-09-26 38 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',这是一个错误。这导致订单隐藏在我的列表中。谢谢你的时间! –

相关问题