如何以编程方式将可预订的产品添加到woocommerce购物车?

时间:2017-12-10 16:45:06

标签: php wordpress woocommerce cart woocommerce-bookings

我正在尝试以编程方式添加可预订的产品,最终会遇到一些困难。

我正在使用我希望客户直接预订的自定义预订详细信息页面。 我的方法从这开始:Add to cart bookable product by URL - WooCommerce Bookings

产品确实会添加到带有列出代码的购物车中,但我确实需要添加元数据,因为购物车显示错误,缺少持续时间且不能为0.

<form class="cart" method="post" enctype="multipart/form-data">
  <input type="hidden" name="add-to-cart" value="product_id" class="wc-booking-product-id" />
  <input type="hidden" name="start-date" value="start_date">
  <input type="hidden" name="end-date" value="end_date">
  <input type="hidden" name="persons" value="1">
  <input type="submit" name="book" class="check_btn"  value="Buy">';
</form>

用这个php:

if(isset($_POST['book'])){ 
    global $woocommerce;
    $woocommerce->cart->add_to_cart( $product_id );
}
do_action( 'woocommerce_after_add_to_cart_form' ); 

我确信有更好的解决方案,因为这似乎是一个可能留下其他问题的解决方法。此外,我想在将项目添加到购物车之前为项目添加更多元数据。

2 个答案:

答案 0 :(得分:0)

为了将产品放入购物车,我必须稍微更改一下表格,如下所示:

<form class="cart" method="post" enctype="multipart/form-data">
<input type="hidden" name="add-to-cart" value="'.$product_id.'" class="wc-booking-product-id" />
<input type="hidden" name="wc_bookings_field_duration" value="'.$lesson_days.'">
<input type="hidden" name="wc_bookings_field_persons" value="'.$participant_nums.'">
<input type="hidden" name="wc_bookings_field_start_date_day" value="'.$lesson_start_date->format('d').'">
<input type="hidden" name="wc_bookings_field_start_date_month" value="'.$lesson_start_date->format('m').'">
<input type="hidden" name="wc_bookings_field_start_date_year" value="'.$lesson_start_date->format('Y').'">
<input type="hidden" name="wc_bookings_field_start_date_time" value="'.$start_time.'">
<input type="submit" class="wc-bookings-booking-form-button single_add_to_cart_button button alt"  value="Buy">

主要的困难是知道开始日期需要分年,月,日和时间。

有一件事仍然困扰着我,根据一些内部计算设定购物车的价格还不行。

答案 1 :(得分:0)

要更新购物车中的价格,您需要先删除计算预订/产品费用的操作。这是一个ajax调用,因此您需要在2个位置删除它。

remove_action( 'wp_ajax_wc_bookings_calculate_costs',  'calculate_costs' );
remove_action( 'wp_ajax_nopriv_wc_bookings_calculate_costs', 'calculate_costs'  );

完成此操作后,您可以添加自己的操作,以便使用自己的计算进行更新。

如 -

add_action( 'wp_ajax_wc_bookings_calculate_costs', 'calculate_costs_mynewcosts', 5 );
add_action( 'wp_ajax_nopriv_wc_bookings_calculate_costs', 'calculate_costs_mynewcosts', 5 );