结帐后将商品添加到现有的 WooCommerce 订单,与创建默认新订单相反

2023-12-25

我需要改变的正常行为place_order结账时按钮:如果已有订单未完成(状态 = 正在处理),WooCommerce 应向该订单添加商品,而不是创建新订单。否则,它应该以默认方式创建一个新订单。

function custom_order() {
    $user_role = wp_get_current_user()->roles[0];
        
    $customer = new WC_Customer($user_id);
    $last_order = $customer->get_last_order();
        
    $last_order_id = $last_order->get_id();
    $last_order_data = $last_order->get_data();
    $last_order_status = $last_order->get_status();
                
    if ( $user_role === "administrator" ) {
        if ($last_order_status === "processing") {          
            foreach ( WC()->cart->get_cart() as $cart_item ) {
                $product = $cart_item['data'];
                $product_id = $product->get_id();
                $quantity = $product->get_quantity();
    
                $last_order->add_product($product, $quantity);
            }
        }

        else {
            // do the normal thing
        }
    }
}

我尝试过以下钩子:

add_action('woocommerce_new_order', 'custom_order', 10, 3);
add_filter('woocommerce_create_order', 'custom_order', 10, 2);

哪一个是正确的以及如何将这一新条件添加到默认订单功能中?


add_filter('woocommerce_create_order', 'create_or_update_order', 10, 2);

function create_or_update_order() {
    $user_obj = wp_get_current_user();

    $user_role = $user_obj->roles[0];
    $user_id = $user_obj->ID;
    $customer = new WC_Customer($user_id);
    $last_order = $customer->get_last_order();
    $last_order_id = $last_order->get_id();
    $last_order_data = $last_order->get_data();
    $last_order_status = $last_order->get_status();

    if ('administrator' === $user_role) {
        if ('processing' === $last_order_status) {
            foreach (WC()->cart->get_cart() as $cart_item) {

                $product = $cart_item['data'];
                $product_id = $product->get_id();
                $quantity = $cart_item['quantity'];

                $last_order->add_product($product, $quantity);
            }
          return $last_order_id;
        } else {
            return null;
        }
    }
    return null;
}

班级内部class-wc-checkout.php,create_order 函数在创建订单之前提供了一个钩子。如果订单ID已经存在,则不会创建另一个订单。如果满足条件,我们将返回订单ID。

public function create_order( $data ) {
    // Give plugins the opportunity to create an order themselves.
    $order_id = apply_filters( 'woocommerce_create_order', null, $this );
    if ( $order_id ) {
        return $order_id;
    }......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

结帐后将商品添加到现有的 WooCommerce 订单,与创建默认新订单相反 的相关文章

随机推荐