Я создаю сайт для заказа пищи, используя WordPress и Woocommerce. Пока что я делаю хорошо, но застрял в какой-то момент, когда метод доставки следует выбирать автоматически.
Что такое поток? Пользователь посещает мои сайты и вводит почтовый индекс адреса доставки, а затем мой сайт показывает рестораны, которые поставляют в этом почтовом индексе. Некоторые рестораны доставляют в этом почтовом индексе за меньшее время и меньше стоимости доставки, но некоторые занимают больше времени и берут больше сборов за доставку.
Что я сделал до сих пор, так это то, что я получаю коды доставки из базы данных, которую предоставляет любой ресторан. Если почтовый индекс пользователя не существует в списке, мы предупреждаем, что мы продвигаемся вперед.
Следующим шагом является получение всех ресторанов, которые поставляются в этом почтовом индексе за меньшее время доставки, а затем рестораны, которые поставляют в этом почтовом индексе больше времени доставки. На основании меньшего количества времени доставки я отмечаю пользователя в зоне A или зоне B соответственно.
У меня есть методы доставки по фиксированной ставке, созданные для Зоны A и Зоны B, которые можно выбрать из раскрывающегося списка на странице Корзина / Оформить заказ. Теперь вот в чем проблема.
Пользователь не должен выбирать скорость доставки. Он должен автоматически выбираться и применяться в зависимости от того, в какой зоне был помечен пользователь.
Это автоматическое обновление не то, что я могу достичь.
Что я пробовал?
Правильный процесс должен состоять в том, чтобы помещать эту зону в сессию Woocommerce, и ее следует выбирать автоматически и применять, когда пользователь достигает страницы тележки или проверки.
Я не могу найти правильный метод для вызова, который может вызвать вызов ajax для обновления доставки. Любые идеи были бы полезны.
С уважением
Похожие темы
Используйте $(body).trigger('update_checkout');
в вашем JS. Это приведет к отключению запроса WC_AJAX->update_order_review
, который затем WC_AJAX->update_order_review
все данные формы в области проверки. Если вам нужно передать какие-либо пользовательские данные, добавьте скрытый ввод в кассу, и он должен позволить вам передать значение через данные $_POST
.
Оттуда, если вам нужно возиться с доступными методами и настройками сеанса, вы можете сделать то, что я сделал, и перезаписать функцию shipping_html
в cart-shipping.php, например.
function woo_new_cart_shipping_html() { global $woocommerce; $data_stream = extract_data_from_str( $_POST['post_data'] ); $packages = $woocommerce->shipping->get_packages(); $chosen_method = isset( $woocommerce->session->chosen_shipping_methods[0] ) ? $woocommerce->session->chosen_shipping_methods[0] : ''; foreach ( $packages as $i => $package ) { $methods = apply_filters( 'woo_filter_available_methods_by_date', $package['rates'], $data_stream ); wc_get_template( 'cart/cart-shipping.php', array('package' => $package, 'available_methods' => apply_filters( 'woo_sort_shipping_methods_by_cost', $methods ), 'show_package_details' => ( sizeof( $packages ) > 1 ), 'index' => $i, 'chosen_method' => apply_filters( 'woo_set_lowest_shipping_method', $chosen_method, $methods, $data_stream ) ) ); } }
Это доказательство обновления, и оно позволит вам настроить этот шаблон, добавив фильтры.
Что касается сброса сеанса, который соответствует выбранному методу, к сожалению, у меня нет ответа для вас, поскольку я все еще сам борюсь с этой точной проблемой.