Я пытаюсь добавить продукт, который можно забронировать, программным путем, и в итоге у меня возникают трудности.
Я использую пользовательскую страницу с подробностями бронирования, с которой я хочу, чтобы клиенты бронировали напрямую.
Мой подход начался с этого: Добавить в корзину заказываемый продукт по 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' );
Я уверен, что есть лучшие решения для этого, так как это, кажется, обходной путь, который может оставить другие проблемы. Кроме того, я хотел бы добавить еще несколько метаданных к элементу, прежде чем добавить его в корзину.
Мне пришлось немного изменить форму, чтобы положить товар в корзину следующим образом:
<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">
Основная трудность заключалась в том, чтобы знать, что дата начала требует отдельного года, месяца, дня и времени.
Меня все еще беспокоит то, что установка цены корзины согласно некоторым внутренним расчетам пока не работает.
Для обновления цены в корзине вам необходимо сначала удалить действие, которое рассчитывает стоимость бронирования / продуктов. Это 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 );