Search code examples
phpwordpresswoocommerceorders

Script to add manual order to Woocommerce


I am trying to add manual orders to woocommerce. Webshop is where I have stock values. I have store also. When customer buy in store, I have to add an order. When I want to add it via Orders->Add order it do not work properly, as I need to add tax value manual (Automattic, why?). I'd like to have hidden page, to add orders.

I've seen Programmatically creating new order in Woocommerce

Here is what I tried: I got order.php file in main folder:

<?php
/*
 * Create order dynamically
 */
require(dirname(__FILE__) . '/wp-load.php');
echo 'ok?';
function create_vip_order() {

  global $woocommerce;

  $address = array(
      'first_name' => 'John',
      'last_name'  => 'Doe',
      'email'      => '[email protected]',
      'phone'      => '123456789',
      'address_1'  => '123 Main st.',
      'city'       => 'San Diego',
      'state'      => 'Ca',
      'postcode'   => '92121',
  );

  // Now we create the order
  $order = wc_create_order();

  // The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php
  $order->add_product( get_product( '376' ), 1 ); // This is an existing SIMPLE product
  $order->set_address( $address, 'billing' );
  //
  $order->calculate_totals();
  $order->update_status("Completed", 'Imported order', TRUE);

}

add_action( 'init', 'create_vip_order' );

Solution

  • Finally code that I need is:

    <?php
    /*
     * Create order manual
     */
    require(dirname(__FILE__) . '/wp-load.php');
    
    function create_new_order() {
    
      global $woocommerce;
    
      $address = array(
          'first_name' => 'Zakup',
          'last_name'  => 'Sklepowy',
          'email'      => '[email protected]',
          'phone'      => '123',
          'address_1'  => 'ul. Przykladowa 1',
          'address_2'  => 'm. 2',
          'city'       => 'Wroclaw',
          'postcode'   => '50-123',
      );
    
      $order = wc_create_order();
    
      $product = new WC_Product(wc_get_product_id_by_sku('*sku_here*'));
      $order->add_product( $product, 1 );
        $order->set_address( $address, 'billing' );
    
        // Set payment gateway
        $payment_gateways = WC()->payment_gateways->payment_gateways();
        $order->set_payment_method( $payment_gateways['cod'] );
    
        // Calculate totals
        $order->calculate_totals();
        $order->update_status('completed', 'In Store ', TRUE);
    }
    
    create_new_order();
    ?>