создание заказа Woocommerce с программным обеспечением line_item

Мне нужно было создать заказ Woocommerce программно, однако использование «старой» Woocommerce сделало это очень грязной процедурой.

Мне пришлось вручную вставлять все записи в базу данных, используя многие вызовы update_post_meta.

Ищете лучшее решение.

С последней версией WooCommerce можно попробовать это как-то вроде

$address = array( 'first_name' => 'Fresher', 'last_name' => 'StAcK OvErFloW', 'company' => 'stackoverflow', 'email' => 'test@test.com', '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(); 

Вызовите этот выше код с помощью своей функции, тогда он будет работать соответствующим образом.

Обратите внимание, что он не работает со старой версией WooCommerce, такой как 2.1.12, работает только с 2.2 WooCommerce.

Надеюсь, поможет

С новой версией WC 2 это намного лучше.

Однако:

  • Я не хочу использовать REST API, потому что я делаю вызов из своего собственного плагина WP напрямую. Я не вижу смысла делать завиток к моему локальному хосту
  • « WooCommerce REST API Client Library » не полезна для меня, потому что это ретрансляция в REST API и не поддерживает вызов Create Order

Если честно, документы API WooCom ограничены, возможно, они все еще находятся в процессе обновления. В настоящее время они не говорят мне, как создать новый порядок, какие параметры необходимы и т. Д.

В любом случае, я понял, как создать заказ с линейным заказом (вашим продуктом), используя классы и функции, используемые REST API, и я хочу поделиться им!

Я создал свой собственный 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(); } } 

Важный:

  • Константа «WOOCOMMERCE_API_DIR» указывает на «/ woocommerce / includes / api /» в вашем плагине.
  • Заказ присваивается клиенту, в моем случае текущему зарегистрированному пользователю. Убедитесь, что у пользователя есть роль, которая позволяет читать, редактировать, создавать и удалять заказы. Моя роль выглядит так:

      $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 ) ); 
  • Если вы хотите посмотреть права менеджера магазина, проверьте

    var_dump (get_option ('wp_user_roles'));

Моя функция create_order красиво создает заказ, с линией в таблицах order_items.

Надеюсь, я вам помог, мне потребовалось некоторое время, чтобы все исправить.