Woocommerce добавляет информацию о локальном пикапе для заказа программно - PullRequest
0 голосов
/ 05 января 2020

Я создаю заказ с php. Я успешно создал заказ, однако не могу добавить информацию о локальном пикапе.

Я использую плагин WooCommerce Local Pickup Plus.

Я хочу добавить следующие поля в заказ:

  1. Способ доставки: местный пикап (уже добавлен в woocommerce)
  2. Место получения: Северный Майами-Бич (уже добавлен в woocommerce)
  3. Дата получения (выбранный пользователем)
  4. Вещи для самовывоза (все товары в корзине)

Мой код до сих пор:

<?php
$woocommerce->cart->empty_cart();
$product_id=358;
$quantity=3;
$variationID=766;
$attr_array=array(
    'choose-a-flavor' => 'Red Velvet'
);
$address = array(
    'first_name' => 'Arka',
    'last_name'  => 'Debnath',
    'company'    => 'Arkas',
    'email'      => 'my.email@mail.com',
    'phone'      => '123-456-780',
    'address_1'  => '123 Main st.',
    'address_2'  => '104',
    'city'       => 'San Diego',
    'state'      => 'Ca',
    'postcode'   => '92121',
    'country'    => 'US'
);
$woocommerce->cart->add_to_cart($product_id, $quantity, $variationID, $attr_array);

$order_data = array(
     'status' => apply_filters('woocommerce_default_order_status', 'processing')
);
$new_order = wc_create_order($order_data);
foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) {
        $item_id = $new_order->add_product(
            $values['data'], $values['quantity'], array(
            'variation' => $values['variation'],
            'totals' => array(
                'subtotal' => $values['line_subtotal'],
                'subtotal_tax' => $values['line_subtotal_tax'],
                'total' => $values['line_total'],
                'tax' => $values['line_tax'],
                'tax_data' => $values['line_tax_data']
            )
            )
        );
    }
$new_order->set_address($address, 'billing');
$new_order->set_address($address, 'shipping');
$new_order->calculate_totals();

// The below part does not work

$woocommerce->shipping->load_shipping_methods();
$shipping_methods = $woocommerce->shipping->get_shipping_methods();
$selected_shipping_method = $shipping_methods['local_pickup'];
$shippingMethod = new \WC_Shipping_Rate($selected_shipping_method->id,$selected_shipping_method->title, 0);
$new_order->add_shipping($shippingMethod);

?>

1 Ответ

0 голосов
/ 31 января 2020

ОК, без помощи, пока далеко. Я нигде не нашел и зацепил WordPress, чтобы сделать это безопасно. Так что на этот раз я пошла не так. Добавлены позиции в базу данных напрямую.

INSERT INTO `wp_woocommerce_order_items` (`order_item_id`, `order_item_name`, `order_item_type`, `order_id`) values (null, 'Local Pickup', 'shipping', '$OrderID')

INSERT INTO `wp_woocommerce_order_itemmeta` (`meta_id`, `order_item_id`, `meta_key`, `meta_value`) VALUES
(null, $OrdeItemID, 'method_id', 'local_pickup_plus'),
(null, $OrdeItemID, 'instance_id', '0'),
(null, $OrdeItemID, 'cost', '0.00'),
(null, $OrdeItemID, 'total_tax', '0'),
(null, $OrdeItemID, 'taxes', 'a:1:{s:5:\"total\";a:0:{}}'),
(null, $OrdeItemID, '_pickup_location_id', '$PickupPostal'),
(null, $OrdeItemID, '_pickup_location_name', 'PickupName'),
(null, $OrdeItemID, '_pickup_location_address', '$PickupLocationArray'),
(null, $OrdeItemID, '_pickup_location_phone', ''),
(null, $OrdeItemID, '_pickup_date', '$DateOfPickup'),
(null, $OrdeItemID, '_pickup_minimum_hours', '$PickupTimeMin'),
(null, $OrdeItemID, '_pickup_items', '$Pickupitem')

Я знаю, что это не очень хорошо, но у меня пока нет лучшего выбора. Если у кого-то есть решение, я буду рад его реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...