Изменения доставки WooCommerce, необходимые для поддержки вызовов API доставки HTTP - PullRequest
0 голосов
/ 24 мая 2019

Расчеты доставки Woocommerce выполняются слишком часто.

Настройка доставки Woocommerce работает прекрасно, пока вы не создадите пользовательский плагин доставки, который использует внешние системы квотирования через вызовы HTTP API, и в этот момент вы понимаете, что стоимость доставки рассчитывается десяткамивремя без необходимости во время процесса заказа - все замедляется.

Мы осуществляем вызовы API на внешние серверы в нашей Австралийской почтовой системе, а также в систему агрегаторов курьеров для получения тарифов на доставку и доставку.Это займет около 5 секунд для завершения двух вызовов API, и поскольку функция calculate_shipping(), по-видимому, вызывается при каждом добавлении и изменении корзины, при входе на страницу оформления заказа и затем при каждом нажатии клавиши для соответствующих полей адреса на странице оформления заказа.5-секундные задержки и ненужные HTTP-вызовы повсюду.

Ajax-вызовы от каждого нажатия клавиши на странице оформления заказа также, похоже, ставятся в очередь и обрабатывают один за другим, так что пользователь может сидеть и смотреть в течение 30 секунд, покапараметры доставки заполняются, а затем очищаются несколько раз, прежде чем можно будет выбрать один.

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

Таким образом, вопрос в том, как остановить WC от вызова calculate_shipping(), пока все поля доставки не будут заполнены и, возможно, последнее поле не потеряло фокус -или любые альтернативные предложения, чтобы сделать подобное и избежать нескольких вызовов.

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

if ('https://aaa.bbb/checkout/' !== $_SERVER['HTTP_REFERER']) {
    return;
}

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

На кассе, хотя это другая история.Мне нужно, чтобы доставка выполнялась, но не для каждого нового символа, введенного в поле адреса, что, по-видимому, является функциональностью по умолчанию.Кажется, в игре есть таймер, и, если вы набираете больше секунды, набираете update_checkout() или что-то подобное, что вызывает calculate_shipping(), и я в итоге связываюсь с почтовыми серверами и серверами курьеров, чтобы запросить новыйцитаты.(я уверен, что они устанут от этой DOS-атаки)

Я изучал скрипт checkout.js, но на самом деле не хочу связываться с функционалом WC и не могу обновиться, поэтому не уверенесли я хочу это изменить.

На данном этапе не имеет значения

Мне бы хотелось, чтобы стоимость доставки не учитывалась до тех пор, пока все товары не будут в корзине и пользователь не закончил вводить ихадрес - все остальное кажется немного глупым.

...