WC_Order не возвращает нужные данные

155
19 апреля 2018, 10:33
<?php
add_action( 'woocommerce_new_order', 'my_status_pending' );
function my_status_pending( $order_id ){
    global $woocommerce;
    $order = new WC_Order( $order_id );
    // Получаем данные с заполненной формы заказа.
    $my_billing = $order->data['billing'];
    // Все родительские категории товара будут записаны в нижеследующую переменную.
    $all_catigories_of_these_products = "";
    // В данную переменную попадают все товары из корзины.
    $items = $order->get_items();
    // Итоговая сумма за все товары.
    $total_sum = 0;
    // Сообщение для отправки в telegram.
    $msg_for_tg = 
                'Номер заказа: ' . $order->get_order_number() . "; \n" .
                'Имя:' . $my_billing['first_name'] . "; \n" .
                'Фамилия: ' . $my_billing['last_name'] . "; \n" .
                'Номер дома и название улицы: ' . $my_billing['address_1'] . "; \n" .
                'Номер телефона: ' . $my_billing['phone'] . "; \n";
?>

Пытаюсь получить данные billing, но не получается. Вот что выходит в итоге.

Заказы я также создаю сам:

<?php
function make_order() {
    global $woocommerce;
    $data = $_POST;
    if( empty( $data['name'] ) || empty( $data['surname'] ) || empty( $data['address'] ) || empty( $data['phone'] ) ) {
        echo 'Error: Переданы не все данные. Пожалуйста заполните все поля!';
        wp_die();
    }
    $address = array(
        'first_name' => $data['name'],
        'last_name'  => $data['surname'],
        'phone'      => $data['phone'],
        'address_1'  => $data['address']
    );
    // Now we create the order
    $order = wc_create_order();
    $order->update_status("processing", 'Order');
    $order->set_address($address, 'billing');
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $order->add_product( wc_get_product( $values['product_id'] ), $values['quantity'] );
    }
    $order->calculate_totals();
    $woocommerce->cart->empty_cart();
}
?>

Как же мне получить данные заказа?

Answer 1

Вы создаете заказ функцией wc_create_order(). Немедленно срабатывает хук woocommerce_new_order, в котором вы пытаетесь прочитать данные адреса, которые ещё не внесли в объект заказа.

Что надо сделать:

  1. Поменять местами строки update_status и set_address
  2. Повесить функцию обработки адреса на хук woocommerce_order_status_changed

Примерно так:

add_action( 'woocommerce_order_status_changed', 'woocommerce_order_status_changed_action' );
function woocommerce_order_status_changed_action( $id, $from, $to, $_this ) {
    // ваш код
}
READ ALSO
headers-&gt;set(&#39;Content-Type&#39;,&#39;text/csv&#39;) не работает (Symfony)

headers->set('Content-Type','text/csv') не работает (Symfony)

Всем привет, я хочу сделать экспорт csv документа, для этого я использую Response:

169
Как правильно написать запрос к БД PDO

Как правильно написать запрос к БД PDO

Нужно написать стандартный запрос к БД используя PDO php ничего сложногоВот запрос, который я использую:

105
Как подставить в два условия where mysql две переменные php?

Как подставить в два условия where mysql две переменные php?

Всем добрый день, как правильно подставить две переменные в условие запроса mysql ? Видимо проблема с ковычкамиКонфиг сервера :

135