停止WooCommerce以减少废弃的Admin新订单上的库存

时间:2019-09-20 09:22:22

标签: wordpress woocommerce

如果管理员要创建订单但放弃订单,库存水平仍然会降低。

复制步骤:

  1. 安装WordPress
  2. 安装WooCommerce
  3. 创建简单的产品并勾选“管理库存”?并将库存水平设置为10
  4. 在前端查看(请参阅屏幕截图before.png)
  5. 以管理员身份创建新订单,但不保存(新->订单->添加商品->退出页面)
  6. 在前端查看(请参见after.png截图)
  7. 即使未保存这些订单,通知库存水平也已降低。

总有办法避免这种情况吗?

Before.png: before.png

After.png after.png

1 个答案:

答案 0 :(得分:1)

我已经研究了这个问题,并为此编写了基本代码。

使用的钩子:用于管理订单添加项目的“ woocommerce_order_item_add_action_buttons”和用于创建/更新管理订单的“ woocommerce_process_shop_order_meta”。

第一部分::停止减少未创建订单时添加的项目的库存。

// define the woocommerce_order_item_add_action_buttons callback 
function action_woocommerce_order_item_add_action_buttons( $order ) { 
    $orderID = $order->ID;
    //check if this is the admin manual order creation 
    if(get_post_status($orderID) == "auto-draft" && get_post_type($orderID) == "shop_order")
    {
        foreach( $order->get_items() as $item_id => $item )
        {
            $product_id = $item->get_product_id();
            $variation_id = $item->get_variation_id();
            $product_quantity = $item->get_quantity();

            if($variation_id == 0)
            {
                $product = wc_get_product($product_id);
                wc_update_product_stock($product, $product_quantity, 'increase');
            }
            else
            {
                $variation = wc_get_product($variation_id);
                wc_update_product_stock($variation, $product_quantity, 'increase' );
            }

            // The text for the note
            $note = __("Stock incremented due to the auto draft post type. Stock for each item will be decremented when this order created.");
            // Add the note
            $order->add_order_note( $note );
        }
    }
}; 

// add the action 
add_action( 'woocommerce_order_item_add_action_buttons', 'action_woocommerce_order_item_add_action_buttons', 10, 1 );

第二部分::减少创建订单后添加的项目的库存。

add_action( 'woocommerce_process_shop_order_meta', 'woocommerce_process_shop_order', 10, 2 );
function woocommerce_process_shop_order ( $post_id, $post ) {
    $order = wc_get_order( $post_id );

    //check if this is order create action, not an update action
    if(get_post_status($post_id) == "draft" && get_post_type($post_id) == "shop_order")
    {
        foreach( $order->get_items() as $item_id => $item )
        {
            $product_id = $item->get_product_id();
            $variation_id = $item->get_variation_id();
            $product_quantity = $item->get_quantity();

            if($variation_id == 0)
            {
                $product = wc_get_product($product_id);
                wc_update_product_stock($product, $product_quantity, 'decrease');
            }
            else
            {
                $variation = wc_get_product($variation_id);
                wc_update_product_stock($variation, $product_quantity, 'decrease' );
            }

            // The text for the note
            $note = __("Stock decremented for all items in this order.");
            // Add the note
            $order->add_order_note( $note );
    }
    }
}

经过测试,工作正常。我希望这能帮到您。祝你有美好的一天。