Создание заказа Woocommerce с программным обеспечением line_item
Мне нужно было создать заказ Woocommerce программно, однако использование "старой" Woocommerce сделало это очень грязной процедурой.
Мне пришлось вручную вставлять все записи в базу данных, используя многие вызовы update_post_meta.
Ищите лучшее решение.
Ответы
Ответ 1
С последней версией WooCommerce можно попробовать это как-то вроде
$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();
Вызовите этот код с помощью вашей функции, тогда он будет работать соответствующим образом.
Обратите внимание, что это не работает со старой версией WooCommerce, такой как 2.1.12, она работает только с 2.2 WooCommerce.
Надеюсь, что это поможет
Ответ 2
С новой версией WC 2 это намного лучше.
Однако:
- Я не хочу использовать REST API, потому что я делаю вызов из собственного WP-плагина напрямую. Я не вижу смысла делать завиток для своего локального хоста
- Клиентская библиотека API-интерфейса REST API WooCommerce 'не полезна для меня, потому что она ретранслирует REST API и не поддерживает вызов Create Order
Если честно, WooCom Документы API ограничены, возможно, они все еще находятся в процессе обновления. В настоящее время они не говорят мне, как создать новый порядок, какие параметры требуются и т.д.
В любом случае, я понял, как создать заказ с линейным заказом (вашим продуктом), используя классы и функции, используемые 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.
Надеюсь, я помог тебе, мне потребовалось некоторое время, чтобы понять это.