2014-10-27 20 views

risposta

39

Con l'ultima versione di WooCommerce è possibile provare questo come qualcosa di simile

$address = array(
      'first_name' => 'Fresher', 
      'last_name' => 'StAcK OvErFloW', 
      'company' => 'stackoverflow', 
      'email'  => '[email protected]', 
      'phone'  => '777-777-777-777', 
      'address_1' => '31 Main Street', 
      'address_2' => '', 
      'city'  => 'Chennai', 
      'state'  => 'TN', 
      'postcode' => '12345', 
      'country' => 'IN' 
     ); 

     $order = wc_create_order(); 
     $order->add_product(get_product('12'), 2); //(get_product with id and next is for quantity) 
     $order->set_address($address, 'billing'); 
     $order->set_address($address, 'shipping'); 
     $order->add_coupon('Fresher','10','2'); // accepted param $couponcode, $couponamount,$coupon_tax 
     $order->calculate_totals(); 

chiamata questo codice precedente con la funzione allora funzionerà di conseguenza.

Nota che non funziona con la versione precedente di WooCommerce come 2.1.12, funziona solo da 2.2 di WooCommerce.

Speranza che aiuta

+0

sì, che aggirerebbe le classi API REST. Buon punto Probabilmente non devi includere alcun file per farlo funzionare, giusto? Soluzione molto più breve, non male! Ci proverò e ti faccio sapere. – Mattijs

+2

È molto utile usare questa funzione 'get_class_methods ($ order))' per vedere quali funzioni sono disponibili quando si ha l'oggetto order! – Mattijs

+0

Bello. Come chiamerei per effettuare questo ordine? – Kirby

7

Con la nuova versione di WC 2, è molto meglio.

Tuttavia:

  • Non voglio utilizzare l'API REST, perché io sto facendo una chiamata dalla mia plug WP direttamente. Non vedo alcun uso nel fare un ricciolo al mio localhost
  • Il 'WooCommerce REST API Client Library' non è utile per me perchè è relè di sulle API REST e non supporta una chiamata Creare ordine

Per essere onesti, Gli API Docs di WooCom sono limitati, forse sono ancora in fase di aggiornamento. Attualmente non mi dicono come creare un nuovo ordine, quali parametri sono richiesti ecc.

In ogni caso, ho capito come creare un ordine con un ordine di linea (il tuo prodotto) utilizzando le classi e le funzioni utilizzate da l'API REST e voglio condividerla!

ho creato la mia classe PHP:

class WP_MyPlugin_woocommerce 
{ 

public static function init() 
{ 
    // required classes to create an order 
    require_once WOOCOMMERCE_API_DIR . 'class-wc-api-exception.php'; 
    require_once WOOCOMMERCE_API_DIR . 'class-wc-api-server.php'; 
    require_once WOOCOMMERCE_API_DIR . 'class-wc-api-resource.php'; 
    require_once WOOCOMMERCE_API_DIR . 'interface-wc-api-handler.php'; 
    require_once WOOCOMMERCE_API_DIR . 'class-wc-api-json-handler.php'; 
    require_once WOOCOMMERCE_API_DIR . 'class-wc-api-orders.php'; 
} 

public static function create_order() 
{ 
    global $wp; 

    // create order 
    $server = new WC_API_Server($wp->query_vars['wc-api-route']); 
    $order = new WC_API_Orders($server); 

    $order_id = $order->create_order(array 
    (
     'order'    => array 
     (
      'status'   => 'processing' 
     , 'customer_id'  => get_current_user_id() 
     // , 'order_meta'  => array 
     //  (
     //  'some order meta'   => 'a value 
     //  , some more order meta' => 1 
     // ) 
     , 'shipping_address'  => array 
      (
       'first_name'   => $firstname 
      , 'last_name'   => $lastname 
      , 'address_1'   => $address 
      , 'address_2'   => $address2 
      , 'city'    => $city 
      , 'postcode'   => $postcode 
      , 'state'    => $state 
      , 'country'    => $country 
      ) 

     , 'billing_address'  => array(..can be same as shipping) 

     , 'line_items'  => array 
      (
       array 
       (
        'product_id'   => 258 
       , 'quantity'   => 1 
       ) 
      ) 
     ) 
    )); 
    var_dump($order_id); 
    die(); 
} 
} 

Importante:

  • punti costanti Il 'WOOCOMMERCE_API_DIR' a '/ woocommerce/include/api /' nella vostra dir plugin.
  • L'ordine è assegnato a un cliente, nel mio caso l'utente attualmente connesso. Assicurati che l'utente abbia un ruolo in grado di leggere, modificare, creare ed eliminare ordini. Il mio ruolo è simile al seguente:

    $result = add_role(
        'customer' 
    , __('Customer') 
    , array 
        (
         'read'   => true 
        // , 'read_private_posts' => true 
        // , 'read_private_products' => true 
        , 'read_private_shop_orders' => true 
        , 'edit_private_shop_orders' => true 
        , 'delete_private_shop_orders' => true 
        , 'publish_shop_orders' => true 
        // , 'read_private_shop_coupons' => true 
        , 'edit_posts' => false 
        , 'delete_posts' => false 
        , 'show_admin_bar_front' => false 
        ) 
    ); 
    
  • Se si vuole guardare al negozio del manager rights, controllare

    var_dump (get_option ('wp_user_roles'));

La mia funzione create_order crea graziosamente un ordine, con il lineitem nelle tabelle order_items.

Spero di averti aiutato, mi ci è voluto un po 'per farlo bene.

+0

La prego di controllare la mia domanda http://stackoverflow.com/questions/36526268/sql-query-to-download-order-report-in-woocommerce. – Manik

Problemi correlati