我使用以下代码向WooCommerce添加了几个新的订单状态:
// Register new status
function register_woocommerce_status() {
register_post_status( 'wc-ready-for-pickup', array(
'label' => 'Ready for Pickup',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Ready for Pickup (%s)', 'Ready for Pickup (%s)' )
) );
register_post_status( 'wc-ready-for-delivery', array(
'label' => 'Ready for Delivery',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'Ready for Delivery (%s)', 'Ready for Delivery (%s)' )
) );
}
add_action( 'init', 'register_woocommerce_status' );
// Add to list of WC Order statuses
function add_awaiting_shipment_to_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// add new order status after processing
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-processing' === $key ) {
$new_order_statuses['wc-ready-for-pickup'] = 'Ready for Pickup';
$new_order_statuses['wc-ready-for-delivery'] = 'Ready for Delivery';
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'add_awaiting_shipment_to_order_statuses' );
这一切都适用于"准备取货",但是如果我尝试将订单状态设置为"准备交付",它根本无法重置。它添加到订单注释中,说它这样做了,但它实际上并没有设置它。
知道问题是什么吗?
您的问题是 WP 将状态名称限制为 20 个字符,而您在 21 岁时带有"wc-ready-for-delivery">
https://developer.wordpress.org/reference/functions/register_post_status/#user-contributed-notes
我有一个类似的问题,认为这是一个权限问题,但实际上是这个 20 个字符的限制。
好吧,万一其他人遇到这种情况,以下是最终对我有用的方法:
我尝试了其他人建议的各种事情,例如将wc-ready-for-delivery放在第一位而不是wc-ready-for-pickup,完全删除wc-ready-for-Pick等。 无论我做什么,系统都不会将其设置为"准备交付">
然后我尝试将密钥从 wc-ready-for-delivery 更改为 wc-readyfor-delivery,它工作得很好。我不知道问题是什么,但你去吧。