Increase/adjust WooCommerce 中自定义订单状态的产品库存数量
Increase/adjust product stock quantity for custom order status in WooCommerce
我有一个名为 'cancel-by-admin' 的自定义订单状态,它是在网站管理员出于某种原因取消订单时设置的。
现在我们需要increase/adjust取消订单时的产品库存盘点。 WooCommerce 已经提供了 'cancel' 订单状态,当它被设置时,库存数量会通过现有代码进行调整。我们需要为 'cancel-by-admin' 状态实现相同的功能。
如何实现?我正在使用 Woocommerce 6.3.1。
有人建议使用函数 wc_update_product_stock()
。还有这个link:
但我注意到什么是最好的方法。请注意,客户可以在一个订单中订购多个产品,因此当管理员取消订单时,需要调整所有关联的产品数量。
要添加自定义订单状态,我使用以下代码:
add_action( 'init', 'register_custom_order_statuses', 20 );
function register_custom_order_statuses() {
register_post_status( 'wc-cancelled-by-us', array(
'label' => _x( 'CancelledByAdmin', 'Order status', 'woocommerce' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'CancelledByAdmin <span class="count">(%s)</span>', 'CancelledByAdmin <span class="count">(%s)</span>', 'woocommerce' )
) );
}
我的代码尝试,我可以在其中使用一些关于如何继续的建议:
add_action('woocommerce_order_status_changed', 'func_status_changed', 10, 4 );
function func_status_changed( $order_id, $old_status, $new_status, $order ){
if ( $new_status == 'cancelled-by-us' ) {
// Stock update operation goes here
}
}
为了添加自定义订单状态,我重写了您的代码,因为:
init
挂钩已替换为 woocommerce_register_shop_order_post_statuses
以注册自定义订单状态。
wc_order_statuses
在下拉列表中添加wc_order_statuses
显示订单状态@单笔订单
添加bulk_actions-edit-shop_order
以在下拉列表中显示订单状态@bulk actions
// Register order status
function filter_woocommerce_register_shop_order_post_statuses( $order_statuses ) {
// Status must start with "wc-"
$order_statuses['wc-cancelled-by-us'] = array(
'label' => _x( 'Cancelled by admin', 'Order status', 'woocommerce' ),
'public' => false,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
/* translators: %s: number of orders */
'label_count' => _n_noop( 'Cancelled by admin <span class="count">(%s)</span>', 'Cancelled by admin <span class="count">(%s)</span>', 'woocommerce' ),
);
return $order_statuses;
}
add_filter( 'woocommerce_register_shop_order_post_statuses', 'filter_woocommerce_register_shop_order_post_statuses', 10, 1 );
// Show order status in the dropdown @ single order
function filter_wc_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// Add new order status after cancel
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-cancelled' === $key ) {
// Status must start with "wc-"
$new_order_statuses['wc-cancelled-by-us'] = _x( 'Cancelled by admin', 'Order status', 'woocommerce' );
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'filter_wc_order_statuses', 10, 1 );
// Show order status in the dropdown @ bulk actions
function filter_bulk_actions_edit_shop_order( $bulk_actions ) {
// Note: "mark_" must be there instead of "wc"
$bulk_actions['mark_cancelled-by-us'] = __( 'Cancelled by admin', 'woocommerce' );
return $bulk_actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'filter_bulk_actions_edit_shop_order', 10, 1 );
要回答您的问题,最好查看现有 'cancel'
订单状态应用了哪些功能,然后重现它。
在wc-stock-functions.php中我们可以看到函数wc_maybe_increase_stock_levels()
在'cancel'
状态和'pending'
状态
要重现它,我们可以使用可用于任何自定义订单状态的 woocommerce_order_status_' . $status_transition['to']
复合挂钩 。
所以你得到:
// Maybe increase stock levels
add_action( 'woocommerce_order_status_cancelled-by-us', 'wc_maybe_increase_stock_levels' );
我有一个名为 'cancel-by-admin' 的自定义订单状态,它是在网站管理员出于某种原因取消订单时设置的。
现在我们需要increase/adjust取消订单时的产品库存盘点。 WooCommerce 已经提供了 'cancel' 订单状态,当它被设置时,库存数量会通过现有代码进行调整。我们需要为 'cancel-by-admin' 状态实现相同的功能。
如何实现?我正在使用 Woocommerce 6.3.1。
有人建议使用函数 wc_update_product_stock()
。还有这个link:
但我注意到什么是最好的方法。请注意,客户可以在一个订单中订购多个产品,因此当管理员取消订单时,需要调整所有关联的产品数量。
要添加自定义订单状态,我使用以下代码:
add_action( 'init', 'register_custom_order_statuses', 20 );
function register_custom_order_statuses() {
register_post_status( 'wc-cancelled-by-us', array(
'label' => _x( 'CancelledByAdmin', 'Order status', 'woocommerce' ),
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop( 'CancelledByAdmin <span class="count">(%s)</span>', 'CancelledByAdmin <span class="count">(%s)</span>', 'woocommerce' )
) );
}
我的代码尝试,我可以在其中使用一些关于如何继续的建议:
add_action('woocommerce_order_status_changed', 'func_status_changed', 10, 4 );
function func_status_changed( $order_id, $old_status, $new_status, $order ){
if ( $new_status == 'cancelled-by-us' ) {
// Stock update operation goes here
}
}
为了添加自定义订单状态,我重写了您的代码,因为:
init
挂钩已替换为woocommerce_register_shop_order_post_statuses
以注册自定义订单状态。wc_order_statuses
在下拉列表中添加wc_order_statuses
显示订单状态@单笔订单
添加bulk_actions-edit-shop_order
以在下拉列表中显示订单状态@bulk actions
// Register order status
function filter_woocommerce_register_shop_order_post_statuses( $order_statuses ) {
// Status must start with "wc-"
$order_statuses['wc-cancelled-by-us'] = array(
'label' => _x( 'Cancelled by admin', 'Order status', 'woocommerce' ),
'public' => false,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
/* translators: %s: number of orders */
'label_count' => _n_noop( 'Cancelled by admin <span class="count">(%s)</span>', 'Cancelled by admin <span class="count">(%s)</span>', 'woocommerce' ),
);
return $order_statuses;
}
add_filter( 'woocommerce_register_shop_order_post_statuses', 'filter_woocommerce_register_shop_order_post_statuses', 10, 1 );
// Show order status in the dropdown @ single order
function filter_wc_order_statuses( $order_statuses ) {
$new_order_statuses = array();
// Add new order status after cancel
foreach ( $order_statuses as $key => $status ) {
$new_order_statuses[ $key ] = $status;
if ( 'wc-cancelled' === $key ) {
// Status must start with "wc-"
$new_order_statuses['wc-cancelled-by-us'] = _x( 'Cancelled by admin', 'Order status', 'woocommerce' );
}
}
return $new_order_statuses;
}
add_filter( 'wc_order_statuses', 'filter_wc_order_statuses', 10, 1 );
// Show order status in the dropdown @ bulk actions
function filter_bulk_actions_edit_shop_order( $bulk_actions ) {
// Note: "mark_" must be there instead of "wc"
$bulk_actions['mark_cancelled-by-us'] = __( 'Cancelled by admin', 'woocommerce' );
return $bulk_actions;
}
add_filter( 'bulk_actions-edit-shop_order', 'filter_bulk_actions_edit_shop_order', 10, 1 );
要回答您的问题,最好查看现有 'cancel'
订单状态应用了哪些功能,然后重现它。
在wc-stock-functions.php中我们可以看到函数wc_maybe_increase_stock_levels()
在'cancel'
状态和'pending'
状态
要重现它,我们可以使用可用于任何自定义订单状态的 woocommerce_order_status_' . $status_transition['to']
复合挂钩 。
所以你得到:
// Maybe increase stock levels
add_action( 'woocommerce_order_status_cancelled-by-us', 'wc_maybe_increase_stock_levels' );