WooCommerce 预订:以编程方式创建预订订单
WooCommerce Bookings: Create a Booking Order programmatically
我已经尝试了几个小时,使用不同的代码并阅读了我能找到的每份预订文档 - 但我似乎无法弄清楚我到底是怎么做到的。
我最大的灵感来自 WooCommerce Booking Doc,但这只是为现有订单添加后续预订。但是我该如何从头开始呢?
我尝试了以下方法,但无法正常工作。
我生成了一个新订单:
$address = array(
'first_name' => 'TestFirst',
'last_name' => 'TestLast',
'company' => 'Overflow',
'email' => 'test@test.com',
'phone' => '777-777-777-777',
'address_1' => '35 Main Street',
'address_2' => '',
'city' => 'Net York',
'state' => 'NY',
'postcode' => '2323',
'country' => 'US'
$order = wc_create_order();
$order->set_address( $address, 'billing' );
$order->set_address( $address, 'shipping' );
我通过
创建了一个预订
$new_booking_data = array(
'start_date' => strtotime( '+1 week', $prev_booking->start ), // same time, 1 week on
'end_date' => strtotime( '+1 week', $prev_booking->end ), // same time, 1 week on
'resource_id' => $prev_booking->resource_id, // same resource
'parent_id' => $booking_id
)
create_wc_booking( $product_id, $new_booking_data = array(), $status = 'confirmed', $exact = false )
我卡在这里了,我现在该怎么办?我想我必须将预订 ID 与 1 的订单相关联。-但我不太确定如何。
我做错了什么?
谢谢。
在您的代码中,您首先定义了这个数组(数组末尾缺少 ;
)。
然后,不是简单地在函数 create_wc_booking()
中使用 $new_booking_data
定义的变量,而是分配给它是一个空数组,将上面的代码置为 NULL。所以你必须像这样设置它:
// Defined array variable
$new_booking_data = array(
'start_date' => strtotime( '+1 week', $prev_booking->start ), // same time, 1 week on
'end_date' => strtotime( '+1 week', $prev_booking->end ), // same time, 1 week on
'resource_id' => $prev_booking->resource_id, // same resource
'parent_id' => $booking_id
); // <= Missing ";" HERE
// Define this variables outside your function
$status = 'confirmed';
$exact = false;
// Now you just put your variables simply like this
create_wc_booking( $product_id, $new_booking_data, $status, $exact );
或者您也可以这样输入值:
create_wc_booking( $product_id, $new_booking_data, 'confirmed', false );
现在应该可以更好地工作了……我希望。
我遇到了同样的问题,我试图将 order_item_id
添加到 $new_booking_data
但它不起作用。
解决方案在这里:https://wordpress.stackexchange.com/questions/222799/woocommerce-bookings-plugin-not-saving-order-id
Gerben Van Dijk is the autor of this solution.
我已经尝试了几个小时,使用不同的代码并阅读了我能找到的每份预订文档 - 但我似乎无法弄清楚我到底是怎么做到的。
我最大的灵感来自 WooCommerce Booking Doc,但这只是为现有订单添加后续预订。但是我该如何从头开始呢?
我尝试了以下方法,但无法正常工作。
我生成了一个新订单:
$address = array( 'first_name' => 'TestFirst', 'last_name' => 'TestLast', 'company' => 'Overflow', 'email' => 'test@test.com', 'phone' => '777-777-777-777', 'address_1' => '35 Main Street', 'address_2' => '', 'city' => 'Net York', 'state' => 'NY', 'postcode' => '2323', 'country' => 'US' $order = wc_create_order(); $order->set_address( $address, 'billing' ); $order->set_address( $address, 'shipping' );
我通过
创建了一个预订$new_booking_data = array( 'start_date' => strtotime( '+1 week', $prev_booking->start ), // same time, 1 week on 'end_date' => strtotime( '+1 week', $prev_booking->end ), // same time, 1 week on 'resource_id' => $prev_booking->resource_id, // same resource 'parent_id' => $booking_id ) create_wc_booking( $product_id, $new_booking_data = array(), $status = 'confirmed', $exact = false )
我卡在这里了,我现在该怎么办?我想我必须将预订 ID 与 1 的订单相关联。-但我不太确定如何。
我做错了什么?
谢谢。
在您的代码中,您首先定义了这个数组(数组末尾缺少 ;
)。
然后,不是简单地在函数 create_wc_booking()
中使用 $new_booking_data
定义的变量,而是分配给它是一个空数组,将上面的代码置为 NULL。所以你必须像这样设置它:
// Defined array variable
$new_booking_data = array(
'start_date' => strtotime( '+1 week', $prev_booking->start ), // same time, 1 week on
'end_date' => strtotime( '+1 week', $prev_booking->end ), // same time, 1 week on
'resource_id' => $prev_booking->resource_id, // same resource
'parent_id' => $booking_id
); // <= Missing ";" HERE
// Define this variables outside your function
$status = 'confirmed';
$exact = false;
// Now you just put your variables simply like this
create_wc_booking( $product_id, $new_booking_data, $status, $exact );
或者您也可以这样输入值:
create_wc_booking( $product_id, $new_booking_data, 'confirmed', false );
现在应该可以更好地工作了……我希望。
我遇到了同样的问题,我试图将 order_item_id
添加到 $new_booking_data
但它不起作用。
解决方案在这里:https://wordpress.stackexchange.com/questions/222799/woocommerce-bookings-plugin-not-saving-order-id
Gerben Van Dijk is the autor of this solution.