我正在使用 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 中过滤预订(即您必须获取所有预订)。
很高兴获得有关最佳方法的指导。
谢谢,安迪
所以我最终根据付款确认创建了一个挂钩。
这可能不是最好的方法,但它是根据正确的触发器传递信息。
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;
}
这仍然是最好的解决方案吗?我知道 Woocommerce 有其预订模块的文档,但现阶段我无法完全理解。
从预订模块中,我试图获取人数和供应商名称/供应商代码,就像您所说的,这不是来自订单网络钩子。
在哪里添加此代码来创建操作事件?
提前致谢。