Расчеты доставки 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 и не могу обновиться, поэтому не уверенесли я хочу это изменить.
На данном этапе не имеет значения
Мне бы хотелось, чтобы стоимость доставки не учитывалась до тех пор, пока все товары не будут в корзине и пользователь не закончил вводить ихадрес - все остальное кажется немного глупым.