WooCommerce预订插件未保存订单ID

时间:2016-04-05 作者:adam2k

我使用WooCommerce Bookings和AJAX请求构建了一个网站,该网站处理付款、创建和订购,最后使用订单ID创建预订。然而,当我通过WooCommerce Bookings创建方法发送新创建的订单ID时,订单不会出现在预订中,我必须手动连接它们。

$order   = wc_create_order();
$product = wc_get_product($productId);
$price = $product->get_price();
$order->add_product( $product, 1 );
$order->set_total( $price );
update_post_meta($order->id, \'_customer_user\', get_current_user_id() );
$order->update_status( \'completed\' );

$new_booking_data = array(
    \'product_id\'  => $productId,
    \'start_date\'  => strtotime($startStr),
    \'end_date\'    => strtotime($endStr), 
    \'user_id\'       => $user_ID,
    \'order_item_id\' => $order->id, // Seems to be an issue here.
    \'persons\'       => $amountOfPeople,
    \'cost\'              => $orderTotal, 
    \'all_day\'           => false,
);

$returnVal = create_wc_booking( $productId, $new_booking_data, \'pending-confirmation\', true );
我知道$order->id是有效的,因为我可以使用它来设置客户id。

预订插件参考:(https://docs.woothemes.com/document/creating-bookings-programatically/)

2 个回复
最合适的回答,由SO网友:Gerben Van Dijk 整理而成

一个小的更新(我今天遇到了这个问题):

上述解决方案不再有效。现在唯一需要做的就是设置post\\u父项:

wp_update_post(array(

    \'ID\' => $booking->id,
    \'post_parent\' => $order->id

));

SO网友:DanielV

基于以下答案:Gerben Van Dijk, 我们需要更新订单项目的父项,而不是订单本身。

如果订单中有多个项目-您可能需要更多的条件逻辑,但这会将预订附加到第一个项目。如果只有一个购物车项目-没有问题!这不是一个优雅的解决方案,但在我的网站上进行预订时,内置的预订功能会起作用。例如,“$booking->get\\u order\\u item\\u id()”在以后不起作用,除非我像这样附加它:

foreach ( $order->get_items() as $item ) {
  wp_update_post( array(
            \'ID\'          => $returnVal->id, // Booking object after success
            \'post_parent\' => $item->get_id()
        ) );
  break;
}

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在