Woo Distance Checkout - кастомный плагин доставки WooCommerce
Веб-программированиеРазработал кастомный WordPress-плагин Woo Distance Checkout для магазина на WooCommerce. Задачей было реализовать полноценную логику оформления заказа с двумя сценариями получения товара: доставкой по адресу клиента или самовывозом из магазина.
Для доставки плагин проверяет адрес через Google Maps, определяет дорожное расстояние от магазина до клиента и автоматически рассчитывает стоимость по заданной формуле. Также реализована максимальная зона доставки: если адрес находится за пределами разрешенного радиуса, пользователь получает понятное сообщение с контактным номером магазина.
В checkout интегрировано Google Places Autocomplete. Во время ввода адреса пользователь видит подсказки, а после выбора нужного варианта данные автоматически распределяются между полями улицы, города, штата, почтового индекса и страны.
Для безопасности API-интеграции использованы отдельные ключи:
* фронтенд-ключ для Google Places Autocomplete;
* серверный ключ для Google Geocoding API и Distance Matrix API.
Для расчета налога интегрировано Sales Tax Rates API через RapidAPI. Налоговая ставка определяется по ZIP-коду адреса доставки, а для самовывоза — по ZIP-коду адреса магазина. Из ответа API используется `combined_rate`, то есть общая ставка налога. Результат кэшируется в WooCommerce session, чтобы не выполнять повторные API-запросы для одного ZIP-кода.
В режиме Pickup адресные billing-поля автоматически заполняются адресом магазина и плавно скрываются. Контактные данные клиента остаются доступными. Стоимость доставки для самовывоза равна нулю, а налог рассчитывается по адресу точки выдачи.
Реализованный функционал
* выбор между Delivery и Pickup;
* Google Places Autocomplete;
* серверная валидация адреса через Google Geocoding API;
* расчет дорожного расстояния через Google Distance Matrix API;
* автоматический расчет доставки за милями;
* базовая ставка, цена за милю, минимальная стоимость и округление;
* максимальная зона доставки;
* автоматическое заполнение адреса магазина при самовывозе;
* Sales Tax Rates API через RapidAPI;
* расчет налога по ZIP-коду;
* объединенная строка Sales Tax с отображением процентной ставки;
* кэширование результатов валидации, расстояния и налога;
* fallback-сценарии при недоступности Tax API;
* блокировка checkout или ручная проверка заказа;
* сохранение расчетов в метаданных заказа;
* отдельная информационная панель в WooCommerce Admin;
* сообщение на странице подтверждения заказа;
* debug-режим для тестирования и диагностики;
* поддержка WordPress i18n;
* совместимость со стандартным WooCommerce checkout.
Плагин построен на модульной архитектуре. Расчет расстояния, валидация адреса, налоги, checkout-контроллер, сохранение метаданных, административная часть и логирование вынесены в отдельные классы. Это упрощает поддержку, тестирование и дальнейшее расширение функционала.
Результат: магазин получил стабильный и понятный checkout, который автоматически определяет доступность доставки, рассчитывает ее стоимость и Sales Tax, поддерживает самовывоз и корректно обрабатывает сбои внешних API. Решение прошло тестирование на реальных адресах и было принято клиентом.
#WordPress #WooCommerce #PHP #JavaScript #AJAX #CustomPluginDevelopment #WooCommerceCheckout #GoogleMapsAPI #GooglePlacesAPI #GeocodingAPI #DistanceMatrixAPI #RapidAPI #SalesTaxRatesAPI #SalesTaxCalculation #ZIPCodeTaxCalculation #DistanceBasedShipping #DeliveryCalculation #AddressValidation #Pickup #APIIntegration #WordPressHooks #OrderMeta #Internationalization #Debugging #CheckoutUX
Для доставки плагин проверяет адрес через Google Maps, определяет дорожное расстояние от магазина до клиента и автоматически рассчитывает стоимость по заданной формуле. Также реализована максимальная зона доставки: если адрес находится за пределами разрешенного радиуса, пользователь получает понятное сообщение с контактным номером магазина.
В checkout интегрировано Google Places Autocomplete. Во время ввода адреса пользователь видит подсказки, а после выбора нужного варианта данные автоматически распределяются между полями улицы, города, штата, почтового индекса и страны.
Для безопасности API-интеграции использованы отдельные ключи:
* фронтенд-ключ для Google Places Autocomplete;
* серверный ключ для Google Geocoding API и Distance Matrix API.
Для расчета налога интегрировано Sales Tax Rates API через RapidAPI. Налоговая ставка определяется по ZIP-коду адреса доставки, а для самовывоза — по ZIP-коду адреса магазина. Из ответа API используется `combined_rate`, то есть общая ставка налога. Результат кэшируется в WooCommerce session, чтобы не выполнять повторные API-запросы для одного ZIP-кода.
В режиме Pickup адресные billing-поля автоматически заполняются адресом магазина и плавно скрываются. Контактные данные клиента остаются доступными. Стоимость доставки для самовывоза равна нулю, а налог рассчитывается по адресу точки выдачи.
Реализованный функционал
* выбор между Delivery и Pickup;
* Google Places Autocomplete;
* серверная валидация адреса через Google Geocoding API;
* расчет дорожного расстояния через Google Distance Matrix API;
* автоматический расчет доставки за милями;
* базовая ставка, цена за милю, минимальная стоимость и округление;
* максимальная зона доставки;
* автоматическое заполнение адреса магазина при самовывозе;
* Sales Tax Rates API через RapidAPI;
* расчет налога по ZIP-коду;
* объединенная строка Sales Tax с отображением процентной ставки;
* кэширование результатов валидации, расстояния и налога;
* fallback-сценарии при недоступности Tax API;
* блокировка checkout или ручная проверка заказа;
* сохранение расчетов в метаданных заказа;
* отдельная информационная панель в WooCommerce Admin;
* сообщение на странице подтверждения заказа;
* debug-режим для тестирования и диагностики;
* поддержка WordPress i18n;
* совместимость со стандартным WooCommerce checkout.
Плагин построен на модульной архитектуре. Расчет расстояния, валидация адреса, налоги, checkout-контроллер, сохранение метаданных, административная часть и логирование вынесены в отдельные классы. Это упрощает поддержку, тестирование и дальнейшее расширение функционала.
Результат: магазин получил стабильный и понятный checkout, который автоматически определяет доступность доставки, рассчитывает ее стоимость и Sales Tax, поддерживает самовывоз и корректно обрабатывает сбои внешних API. Решение прошло тестирование на реальных адресах и было принято клиентом.
#WordPress #WooCommerce #PHP #JavaScript #AJAX #CustomPluginDevelopment #WooCommerceCheckout #GoogleMapsAPI #GooglePlacesAPI #GeocodingAPI #DistanceMatrixAPI #RapidAPI #SalesTaxRatesAPI #SalesTaxCalculation #ZIPCodeTaxCalculation #DistanceBasedShipping #DeliveryCalculation #AddressValidation #Pickup #APIIntegration #WordPressHooks #OrderMeta #Internationalization #Debugging #CheckoutUX