Добавить в корзину заказываемый продукт по URL - WooCommerce Bookings

Я использую Woocommerce Bookings

Как добавить в корзину заказываемый товар по URL?

/?add-to-cart=[n.product]

Как я могу передать доступную дату с вариациями?

Спасибо

1 ответ

Недавно я столкнулся с той же проблемой, но нашел решение.

Невозможно добавить продукт, который можно забронировать, просто добавив правильные переменные в конец URL, потому что WooCommerce Bookings ожидает, что данные будут отправлены через POST метод, как вы можете видеть в источнике плагина:

// woocommerce-bookings/includes/class-wc-booking-cart-manager.php : ln 256
$booking_form                       = new WC_Booking_Form( $product );
$cart_item_meta['booking']          = $booking_form->get_posted_data( $_POST );
$cart_item_meta['booking']['_cost'] = $booking_form->calculate_booking_cost( $_POST );

// Create the new booking
$new_booking = $this->create_booking_from_cart_data( $cart_item_meta, $product_id );

а также:

// woocommerce-bookings/includes/class-wc-booking-cart-manager.php : ln 276
private function create_booking_from_cart_data( $cart_item_meta, $product_id, $status = 'in-cart' ) {
    // Create the new booking
    $new_booking_data = array(
        'product_id'    => $product_id, // Booking ID
        'cost'          => $cart_item_meta['booking']['_cost'], // Cost of this booking
        'start_date'    => $cart_item_meta['booking']['_start_date'],
        'end_date'      => $cart_item_meta['booking']['_end_date'],
        'all_day'       => $cart_item_meta['booking']['_all_day'],
    );

Вместо этого:

<a href="/?add-to-cart=product_id">Add to cart</a>

Вам необходимо создать форму с несколькими скрытыми полями с кнопкой / ссылкой "Добавить в корзину" в качестве кнопки отправки.

Что-то вроде этого:

<form method="post" action="/">
    <input type="hidden" name="add-to-cart" value="product_id">
    <input type="hidden" name="wc_bookings_field_start_date_year" value="booking_start_date_year">
    <input type="hidden" name="wc_bookings_field_start_date_month" value="booking_start_date_month">
    <input type="hidden" name="wc_bookings_field_start_date_day" value="booking_start_date_day">
    <button type="submit">Add to cart</button>
</form>
Другие вопросы по тегам