Wordpress (Woocommerce extension) - Create new ord

2019-03-08 20:57发布

I want to create a new order programmatically.

Workflow is simple: After submitting simple form, user will be created and along with that, a new order.

I managed to create a new user and user_id is returned, now I need to assign a new order all in one step.

How can I accomplish this?

8条回答
Rolldiameter
2楼-- · 2019-03-08 21:49

maybe this way..

    function insert_order_to_db($seller,$order_date){
        global $wpdb;
        $result   = $wpdb->query(
            "
            INSERT INTO `wp_posts`(`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`)

            VALUES (
            17188,
            $seller,
            '".date_format($order_date, 'Y-m-d H:i:s e')."',
            '".date_format($order_date, 'Y-m-d H:i:s e')."',
            'no',
            'Order –". date_format($order_date, 'F d, Y @ h:i A')."',
            'noxp',
            'wc-completed',
            'open',
            'close',
            '".uniqid( 'order_' )."',
            'order-". date_format($order_date, 'M-d-Y-hi-a')."',
            '',
            '',
            '2017-07-24',
            '2017-07-24',
            '',
            0,
            '',
            0,
            'shop_order',
            '',
            0)

            "
        );
        $order_id = $wpdb->insert_id;
        return $order_id;
    }
function proccess_order_meta(){
        $date     = date_create("2017-07-24");
        $order_id = insert_order_to_db(194816,$date);
        if( is_wp_error( $order_id ) ){
            $order->errors = $order_id;
        }
        else
        {
            $order_id = 17188;
            add_post_meta($order_id, '_payment_method_title', 'پرداخت آنلاین', true);
            add_post_meta($order_id, '_order_total', 30000, true);
            add_post_meta($order_id, '_customer_user',  194816, true);
            add_post_meta($order_id, '_completed_date', date_format( $date, 'Y-m-d H:i:s e'), true);
            add_post_meta($order_id, '_paid_date', date_format( $date, 'Y-m-d H:i:s e'), true);
            add_post_meta($order_id, '_billing_email', "mavaezi46@gmail.com", true);
            add_post_meta($order_id, '_billing_first_name', "علی", true);

        }

    }
    proccess_order_meta();
查看更多
成全新的幸福
3楼-- · 2019-03-08 21:53

As of WooCommerce 2.2 (or maybe 2.1 I'm not 100% sure) there is now a function specifically designed for this.

wc_create_order( $args = array() )

with the following default arguments.

$default_args = array(
    'status'        => '',
    'customer_id'   => null,
    'customer_note' => null,
    'order_id'      => 0
);

You can see the whole function in the includes/wc-core-functions.php file.

查看更多
登录 后发表回答