tag name php wordpress woocommerce

php - name - creando orden de Woocommerce con line_item programáticamente



get tag name wordpress (2)

Necesitaba crear un pedido de Woocommerce mediante programación, sin embargo, el uso del "viejo" Woocommerce lo convirtió en un procedimiento muy sucio.

Tuve que insertar todo tipo de registros de base de datos manualmente, usando muchas llamadas update_post_meta.

Buscando una mejor solución.


Con el nuevo lanzamiento de WC 2, es mucho mejor.

Sin embargo:

  • No quiero usar la API REST, porque estoy haciendo una llamada desde mi propio complemento WP directamente. No veo uso en hacer un curl a mi localhost
  • La '' Biblioteca de clientes de la API REST de WooCommerce '' no es útil para mí porque se basa en la API REST y no admite una llamada Crear orden

Para ser honesto, los documentos API de WooCom son limitados, tal vez aún estén en el proceso de actualización. Actualmente no me dicen cómo crear un nuevo pedido, qué parámetros son necesarios, etc.

De cualquier forma, descubrí cómo crear un pedido con un pedido de línea (su producto) usando las clases y funciones utilizadas por la API REST y ¡quiero compartirlo!

Creé mi propia clase de 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:

  • La constante ''WOOCOMMERCE_API_DIR'' apunta a ''/ woocommerce / includes / api /'' en el directorio de su plugin.
  • El pedido se asigna a un cliente, en mi caso, el usuario que ha iniciado sesión actualmente. Asegúrese de que su usuario tenga un rol que tenga la capacidad de leer, editar, crear y eliminar pedidos. Mi papel se ve así:

    $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 ) );

  • Si desea consultar los rights del gerente de la tienda, consulte

    var_dump (get_option (''wp_user_roles''));

Mi función create_order crea un orden, con el artículo de línea en las tablas order_items.

Espero haberte ayudado, me tomó un tiempo hacerlo bien.


Con la última versión de WooCommerce es posible intentar esto como algo así como

$address = array( ''first_name'' => ''Fresher'', ''last_name'' => '''', ''company'' => '''', ''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();

Llame a este código anterior con su función, entonces funcionará en consecuencia.

Tenga en cuenta que no funciona con la versión anterior de WooCommerce como 2.1.12, solo funciona desde la versión 2.2 de WooCommerce.

Espero eso ayude