Переменные WooCommerce в Webhooks - PullRequest
0 голосов
/ 16 апреля 2020

Я использую плагины WooCommerce Bookings & WooCommerce Vendors и хочу получить информацию о бронировании и поставщике в Webhook (при подтверждении заказа) вместе с информацией о заказе для отправки третьему лицу.

В настоящее время веб-крючок «Заказ создан» содержит только сведения о заказе продукта (не «Booking & Vendor»).

Я много раз искал разные ответы и пытался go найти несколько разных путей (ввод в веб-крючок). непосредственно против add_order_item_meta.

Вот один из способов, которые я пробовал:

add_action('woocommerce_add_order_item_meta', 'add_order_item_meta', 10, 2);

function add_order_item_meta($item_id, $values) {

    // Get order id to get booking details

    global $post;
    $order = wc_get_order( $post->ID );
    $order_id = $order->get_id();
    $items = $order->get_items();

    $booking_data = new WC_Booking_Data_Store();
    $booking_ids = $booking_data->get_booking_ids_from_order_id( $order_id );

    if ( is_array( $booking_ids ) && count( $booking_ids ) > 0 ) {
        foreach ( $booking_ids as $booking_id ) {
            $booking = get_wc_booking( $booking_id );
      $booking_product = $booking->get_product()->get_title()
            $booker_start_date = $booking->get_start_date();
            $booker_end_date = $booking->get_end_date();    

      if ( ! empty( $booking_id ) ){
                woocommerce_add_order_item_meta($item_id, "Booking Title", $booking_product);
            }
      if ( ! empty( $booking_id ) ){
                woocommerce_add_order_item_meta($item_id, "Booking ID", $booking_id);
            }
            if ( ! empty( $booker_start_date ) ){
                woocommerce_add_order_item_meta($item_id, "Booking Start Date", $booker_start_date);
            }
            if ( ! empty( $booker_end_date ) ){
                woocommerce_add_order_item_meta($item_id, "Booking End Date", $booker_end_date);
            }
        }
    }

Результатом этого является большой массив заказов, которые были сделаны под пользователем, поэтому кажется, что $ order_id не передается в $ bookings_id должным образом.

Кроме того, по какой-то причине я не смог получить $items = $order->get_items();, поскольку я продолжаю получать Uncaught Error: Call to a member function get_items() on boolean. Я хочу использовать это, чтобы получить электронная почта поставщика.

Я бы предпочел веб-крюк, а не API, потому что похоже, что вы не можете фильтровать бронирование через API (ie вам нужно получить Все заказы).

Рад получить любое руководство о том, как лучше к нему подойти.

Спасибо, Энди

1 Ответ

0 голосов
/ 22 апреля 2020

Итак, я создал хук на основе подтвержденного платежа.

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

add_action('woocommerce_webhook_payload', 'my_woocommerce_webhook_payload', 1, 4);

function my_woocommerce_webhook_payload($payload, $resource, $resource_id, $id) {
    // Get Order details via order id
    $payload['order_id'] = $resource_id;
    $order_id = $resource_id;
    $order = wc_get_order( $order_id );
    $order_data = $order->get_data();

    // Get booking ids from Order
    $booking_ids = WC_Booking_Data_Store::get_booking_ids_from_order_id( $order_id );
    $payload['booking_ids'] = $booking_ids;



    // Add relevant information to each booking
    if ( is_array( $booking_ids ) && count( $booking_ids ) > 0 ) {
        foreach ( $booking_ids as $key=>$booking_id ) {
            // Fetch booking details
            $booking = get_wc_booking( $booking_id );
            $booking_product = $booking->get_product()->get_title();
            $booker_start_date = $booking->get_start_date();
            $booker_end_date = $booking->get_end_date();

            $booking_details = [];
            // Add booking details

            $payload["bookings"][$key] = $booking_details;      
        }
    }

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