Php 自定义订单状态为';t显示在客户我的帐户订单历史记录上

Php 自定义订单状态为';t显示在客户我的帐户订单历史记录上,php,wordpress,woocommerce,status,orders,Php,Wordpress,Woocommerce,Status,Orders,在WooCommerce中,我创建了2个自定义订单状态。第一个是“装运状态”,另一个是“批准状态” 在我将某些订单状态更改为这两种新状态(即发货或已批准)后,客户无法在其订单历史页面上查看此订单 这是我的密码: function register_awaiting_shipment_order_status() { if('product_manager' == $get_roles || 'administrator' == $get_roles){ registe

在WooCommerce中,我创建了2个自定义订单状态。第一个是“装运状态”,另一个是“批准状态”

在我将某些订单状态更改为这两种新状态(即
发货
已批准
)后,客户无法在其订单历史页面上查看此订单

这是我的密码:

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' );
功能寄存器\等待\发货\订单\状态(){
if('product_manager'=$get_roles | |'administrator'=$get_roles){
注册后状态('wc shipping',数组(
“标签”=>“wc配送”,
“public”=>正确,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
'label_count'=>\u n_noop('Shipping(%s)','Shipping(%s)'
) );
}
if('approver'=$get|u roles | |'administrator'=$get|u roles | | product|u manager'=$get|u roles){
注册后状态('wc approved',数组(
“标签”=>“wc已批准”,
“public”=>正确,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
“标签计数”=>\u n\u noop('Approved(%s)','Approved(%s)')
) );
}
}
添加操作('init','register''u waiting''u shipping''u order''u status');
但如果我将订单状态更改回Woocommerce的默认订单状态(例如“已完成”),则客户可以在其订单历史记录中再次查看它们

我做错了什么?
如何在“客户订单历史记录”页面上显示具有新自定义状态的新订单


谢谢。

我已经纠正了您代码中的小错误。您需要用主题文本域(或slug)替换
textdomain

要完成并显示此新的自定义订单状态,您还需要在
过滤器挂钩中注册它们,该挂钩用于
my\u account/orders.php
模板,该模板在客户的帐户页面上显示客户订单

这是重新访问的代码:

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 register\u new\u custom\u order\u status(){
if('product_manager'=$get_roles | |'administrator'=$get_roles){
注册后状态('wc shipping',数组(
'label'=>x('Shipping','Order status','textdomain'),
“public”=>正确,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
'label_count'=>\u n_noop('Shipping(%s)','Shipping(%s)'
) );
}
if('approver'=$get|u roles | |'administrator'=$get|u roles | | product|u manager'=$get|u roles){
注册后状态('wc approved',数组(
'label'=>x('Approved','Order status','textdomain'),
“public”=>正确,
“从搜索中排除”=>false,
“在\u管理\u所有\u列表中显示\u”=>true,
“在管理状态列表中显示”=>true,
“标签计数”=>\u n\u noop('Approved(%s)','Approved(%s)')
) );
}
}
添加操作('init','register'新的\自定义\订单\状态');
//在wc_订单_状态(功能)中注册新状态。
功能寄存器\新\自定义\ wc \订单\状态($order\状态){
$order_status['wc-shipping']=_x('shipping','order status','textdomain');
$order_status['wc-approved']=_x('approved','order status','textdomain');
返回$order\u状态;
}
添加过滤器('wc_订单_状态','register_new_custom_wc_order_状态');
这段代码位于活动子主题(或主题)的function.php文件或任何插件文件中

代码经过测试,功能齐全


参考资料:


很抱歉带回来,我总共有3件物品处于“wc shipping”状态,我可以在订单列表上方看到此状态的过滤器,但当我选择“All(10)”作为过滤器时,管理员的订单页面中只列出7件物品。有什么办法可以解决这个问题吗?@BrunoRodrigues我没有答案,例如……你必须自己搜索并尝试一下,或者问一个关于StackOverFlow的新问题。我们的一个编码员把前缀从“wc-”改为“qc”,这是一个错误。这导致订单隐藏在我的列表中。谢谢你的时间!