2015-07-09 4 views
2

Я создаю сайт для заказа продуктов питания, используя Wordpress и Woocommerce. Пока что я делаю хорошо, но застрял в какой-то момент, когда метод доставки следует выбирать автоматически.Обновление woocommerce Способ доставки через ajax

Что такое поток? Пользователь посещает мои веб-сайты и вводит почтовый индекс доставки, а затем мой сайт показывает рестораны, которые поставляют в этом почтовом индексе. Некоторые рестораны доставляют в этом почтовом индексе за меньшее время и меньше стоимости доставки, но некоторые занимают больше времени и берут больше сборов за доставку.

Что я сделал до сих пор, так это то, что я извлекаю коды доставки из базы данных, которую предоставляет любой ресторан. Если почтовый индекс пользователя не существует в списке, мы предупреждаем, что мы продвигаемся вперед.

Следующий шаг - принести все рестораны, которые поставляют в этом почтовом индексе, за меньшее время доставки, а затем рестораны, которые доставляют в этом почтовом индексе больше времени доставки. На основании меньшего количества времени доставки я отмечаю пользователя в зоне A или зоне B соответственно.

У меня есть способы доставки по фиксированной ставке, созданные для Зоны A и Зоны B, которые можно выбрать из выпадающего списка на странице Корзина/Оформить заказ. Теперь вот в чем проблема.

Пользователь не должен выбирать, какой должна быть скорость доставки. Он должен автоматически выбираться и применяться в зависимости от того, в какой зоне был помечен пользователь.

Это автоматическое обновление не то, что я могу достичь.

Что я пробовал?

Правильный процесс должен состоять в том, чтобы помещать эту зону в сеанс Woocommerce, и ее следует выбирать автоматически и применять, когда пользователь достигает страницы тележки или проверки.

Я не могу найти правильный способ вызова, который может вызвать вызов ajax для обновления доставки. Любые идеи были бы полезны.

С уважением

Similar Thread on Stackoverflow

ответ

3

Используйте $(body).trigger('update_checkout'); в вашем JS. Это закроет запрос 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))); 

    } 
} 

Это доказательство обновления, и оно позволит вам настроить этот шаблон, добавив фильтры.

Что касается сброса сеанса, который соответствует выбранному методу, к сожалению, у меня нет ответа для вас, поскольку я все еще сам борюсь с этой точной проблемой.

+0

Спасибо Kirk за форматирование! Сделал это в спешке, пытаясь найти свой собственный ответ в другом месте. –

+0

Эй, Тревор, чтобы быть понятным, вы хотите использовать JQuery, чтобы выбрать элемент ** HTML body body, а затем запустить событие update_checkout? – Squagem

Смежные вопросы