Webhooks 中的 WooCommerce 变量

问题描述 投票:0回答:2

我正在使用 WooCommerce Bookings 和 WooCommerce Vendors 插件,我想在 Webhook 中获取预订和供应商信息(在订单确认时)以及发送给第 3 方的订单信息。

目前,订单创建 webhook 仅包含产品订单详细信息(不包含预订和供应商)。

我一直在寻找不同的答案,并尝试走一些不同的路径(直接输入到 webhook 与 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
。我想用它来获取供应商电子邮件。

我更喜欢使用 Webhook 而不是使用 API,因为看起来您无法在 API 中过滤预订(即您必须获取所有预订)。

很高兴获得有关最佳方法的指导。

谢谢,安迪

wordpress woocommerce hook-woocommerce woocommerce-rest-api
2个回答
0
投票

所以我最终根据付款确认创建了一个挂钩。

这可能不是最好的方法,但它是根据正确的触发器传递信息。

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;
}

0
投票

这仍然是最好的解决方案吗?我知道 Woocommerce 有其预订模块的文档,但现阶段我无法完全理解。

从预订模块中,我试图获取人数和供应商名称/供应商代码,就像您所说的,这不是来自订单网络钩子。

在哪里添加此代码来创建操作事件?

提前致谢。

© www.soinside.com 2019 - 2024. All rights reserved.