Some cases we required to create dynamic woocommerce order by programatically. So here we are covering this part below. Woocommerce provided wc_create_order()
function to create order by code. This function has array argument and its return wc_order
or wc_error
.
To the right implementation, in following example we have created one woocommerce product called basic plan. We offering this plan for free. so that means on click of buy we will directly create woocommerce order for that particular user. so for 0 price user dont need to go on cart and checkout page to purchase package. This auto creation of order will skip that cart and checkout process for user.
Order in backend
After creation of order dynamically we can see it in woocommerce backend view in orders section.
// shortcode of price block add_shortcode('free_basic_package', 'free_basic_package_callback'); // callback function of shortcode function free_basic_package_callback($atts) { // Get currently logged in user id $user_id = get_current_user_id(); // declare some variables to show messages of validations $msg = $success = ""; // check form is submitted or not if ($_POST['purchase_basic']) { // check if user logged in then we will go further to create order. if ($user_id) { $product_id = $_POST['purchase_basic']; // set user information by current user id meta. // here you set your own default address details $user_info = array( 'first_name' => get_user_meta($user_id, 'billing_first_name', true), 'last_name' => get_user_meta($user_id, 'billing_last_name', true), 'address_1' => get_user_meta($user_id, 'billing_address_1', true), 'address_2' => get_user_meta($user_id, 'billing_address_2', true), 'company' => get_user_meta($user_id, 'billing_company', true), 'email' => get_user_meta($user_id, 'billing_email', true), 'phone' => get_user_meta($user_id, 'billing_phone', true), 'country' => get_user_meta($user_id, 'billing_country', true), 'state' => get_user_meta($user_id, 'billing_state', true), 'postcode' => get_user_meta($user_id, 'billing_postcode', true), 'city' => get_user_meta($user_id, 'billing_city', true), ); // create the order $order = wc_create_order(); // The add_product() function has 2 parameters first product and sectiond quantity that we are passing below $order->add_product(get_product($product_id), 1); // set user information to set_address function for billing $order->set_address($user_info, 'billing'); // set user information to set_address function for shipping $order->set_address($user_info, 'shipping'); // Get payment gateways $payment_gateways = WC()->payment_gateways->payment_gateways(); // Set payment gateways bacs. you can set any one which is having in $payment_gateways array. $order->set_payment_method($payment_gateways['bacs']); // Calculate totals $order->calculate_totals(); // set custer id to order $order->set_customer_id($user_id); // set complated status for this order. if ($order->update_status('completed', 'Order created dynamically for bronze package', TRUE)) { // set message if order created successfully and set status as completed $success = "'; return $form; }Thanks for join to our basic plan!!
"; } } else { // set message if user not logged in to site $msg = "Please login first to buy package!!
"; } } // return html form by shortcode callback funciton $form = ' ' . $success . ' ' . $msg . '
Order in backend
After creation of order dynamically we can see it in woocommerce backend view in orders section.
0 Comments
If you have any doubts, please mention in comment or if you want to discuss privately then please use this email : codetrycatch@gmail.com.
We will definitely try to contact you. Thanks.