Исправление замечаний ревью каталога плагинов WordPress.org (WP-38).
Соответствие требованиям WordPress.org
- Text domain приведён к слагу плагина:
wp-apiship→apiship; файлы переводов переименованы, добавлен перевод строкиShipping - Из gettext-вызовов убраны переменные и пустые/чужие домены — все параметры теперь литеральные строки
- Переименованы PHP-идентификаторы с запрещённым префиксом
wp: namespace и классыWP_ApiShip*→ApiShip*, константыWP_APISHIP_*→APISHIP_*,wp_apiship_bootstrap→apiship_bootstrap. Ключи опций/хуков/метыwp_apiship_*в БД сохранены — обратная совместимость установленных магазинов.WP_APISHIP_SHIPPING_CACHEиз wp-config.php продолжает действовать - Экранирован весь вывод (~110 мест): шаблоны метабокса заказа, карточек служб доставки, сопоставления статусов, чекаута —
esc_html/esc_attr/esc_url/absint/wp_ksesпо контексту - JSON тарифов в скрытых контейнерах выводится экранированным, JS читает его через
.text()— устранён вектор XSS черезhtmlspecialchars_decode - Точечная обработка ввода вместо всего
$_POST: калькулятор получает толькоpayment_method, сохранение настроек читает только свой токен; добавленыwp_unslashпри чтении$_GETи cookie ПВЗ с валидацией JSON - Безлимитный
set_time_limit(0)удалён из крона списка провайдеров и заменён ограниченными значениями внутри конкретных длительных функций (синхронизация статусов — 300 сек, загрузка списка ПВЗ — 120 сек) - Добавлена защита от прямого доступа (
ABSPATH) в оставшиеся файлы шаблонов и настроек - Тестовый API переведён на
https://api.dev.apiship.ru - Добавлен
readme.txtв формате WordPress.org: задокументированы внешние сервисы (ApiShip API, Яндекс.Карты) со ссылками на условия использования и расположение неминифицированных исходников JS/CSS
Исправительный релиз к 1.7.0: в 1.7.0 плагин не активировался и его AJAX не работал.
Критические исправления
- Устранена фатальная ошибка активации: вызов
WP_ApiShip_HPOS_Migration::init()внутри пространства имёнWP_ApiShipрезолвился в задвоенный namespace - Инициализация перенесена на хук
plugins_loaded. Ранее классы WooCommerce могли быть ещё не загружены, если каталог плагина сортируется доwoocommerce/(напримерapiship/) — это приводило кFatal error: Class "WC_Admin_Settings" not foundна каждом запросе - Восстановлена работа AJAX: проверка nonce, добавленная в 1.7.0, отклоняла все запросы, так как JavaScript плагина nonce не передавал
- Разграничены права доступа к AJAX: административные операции требуют
manage_woocommerce, покупателю доступны только выбор ПВЗ и тарифа
Совместимость с HPOS
- Мета-бокс ApiShip снова отображается на странице заказа: в хуки HPOS передаётся объект
WC_OrderвместоWP_Post - Восстановлено подключение JS и CSS на экране заказа HPOS
- Колонка «ApiShip Order» возвращена в список заказов HPOS
- Массовые действия печати наклеек и актов регистрируются для обоих типов хранилища
- Миграция переносит данные заказов из корзины; на сайтах без устаревших данных уведомление о миграции больше не показывается
Безопасность
- Устранена SQL-инъекция в обработчике статусов: идентификатор заказа из ответа API подставлялся в запрос без подготовки
- Устранено межсайтовое выполнение сценариев: данные пункта выдачи с оформления заказа санитизируются, экранирован вывод истории статусов, адресов ПВЗ, колонки заказов, наименования метода доставки и уведомлений массовых действий
- Обработчик активатора больше не запускается по GET-параметру без прав администратора
- Удалены AJAX-действия
getTokenиgetTokenTest, возвращавшие ключ API в браузер - Служебная страница отладки экранирует значения и маскирует ключ API
- Журналы пишутся через
WC_Loggerвместо каталога плагина, доступного по HTTP - Cookie выбора ПВЗ получила флаги
SecureиSameSite
Совместимость с актуальными версиями WordPress и WooCommerce
Проверено на живых стендах: WordPress 7.0.2 + WooCommerce 10.9.4 + PHP 8.3 (HPOS включен и выключен) и WordPress 6.4.3 + WooCommerce 8.0.4 + PHP 8.1 — активация, регистрация метода доставки, мета-данные заказов, крон, страницы админки; журнал отладки без единой записи от плагина.
- Обновлён заголовок
WC tested up to: 10.9, добавленыRequires at least: 6.0,Requires PHP: 7.4иRequires Plugins: woocommerce(WordPress 6.5+ не даст активировать плагин без WooCommerce; старые версии заголовок игнорируют) - Объявлена несовместимость с блочным чекаутом (
cart_checkout_blocks): выбор ПВЗ работает только с классическим чекаутом[woocommerce_checkout]— WooCommerce теперь честно предупреждает об этом владельца магазина - Переводы загружаются на хуке
init: с WordPress 6.7 более ранняя загрузка вызывала notice_load_textdomain_just_in_time; заголовок вкладки настроек переводится лениво по той же причине - Объявлено свойство
WP_ApiShip_Shipping_Method::$is_admin: динамические свойства устарели в PHP 8.2 и удаляются в PHP 9 - Устранено предупреждение
Undefined variable $meta_dataдля заказов без строк доставки (созданных вручную или импортированных)
Стабильность
- Исправлен таймаут HTTP-запросов: значение задавалось в миллисекундах, из-за чего запрос к недоступному API висел до 5,5 часов вместо 20 секунд
- Исправлен запрос истории статусов: дата кодируется для URL (иначе терялось смещение часового пояса), пагинация читается из объекта
metaи больше не использует рекурсию - Массовая печать наклеек больше не привязывает заказ ApiShip от предыдущего заказа к заказу без строки доставки
- Добавлены проверки на отсутствующий заказ, удалённый товар и некорректный JSON
- Исправлено отображение срока доставки «1 день»
- Добавлена полная поддержка высокопроизводительного хранилища заказов (HPOS) WooCommerce 8.0+
- Создан слой абстракции для совместимости с HPOS и legacy системой постов
- Добавлена автоматическая миграция данных между системами хранения заказов
- Реализованы комплексные тесты совместимости HPOS
- Обновлены мета-боксы заказов для поддержки новых экранов HPOS
- Адаптированы bulk actions для работы с правильными хуками HPOS
- Улучшена безопасность AJAX запросов с добавлением nonce проверок
- Заменены все вызовы
json_encodeнаwp_json_encodeдля соблюдения WordPress стандартов - Устранены все прямые вызовы
post_metaфункций в пользу HPOS-совместимых методов - Исправлены критические SQL запросы к wp_posts/wp_postmeta в миграции для полной HPOS совместимости
- Добавлена декларация совместимости с HPOS через
FeaturesUtil - Обновлены требования: WooCommerce 8.0+, WordPress 6.0+, PHP 7.4+
- Добавлена подробная документация по HPOS в
HPOS-SUPPORT.md
- Добавлена возможность изменить стоимость доставки с получателя
- Добавлена возможность изменить способ доставки (СД, тариф, ПВЗ)
- На карту добавлены кнопки масштабирования + и -
- Улучшена скорость работы модуля
- Исправлена ошибка отображения большого кол-ва ПВЗ на карте
- Исправлен расчет общих габаритов заказа, если не указаны габариты грузоместа по умолчанию
- Добавлена возможность отображения всех ПВЗ на одной карте
- Добавлена возможность отображения ПВЗ каждой из СД на отдельной карте
- Добавлена возможность удаления заказа в ApiShip
- Исправлено формирование строки адреса получателя и отправителя
- Улучшен процесс удаления модуля
- Добавлена возможность пройти авторизацию в ApiShip по токену
- Добавлена возможность массовой генерации этикеток и актов приема-передачи
- Добавлена возможность валидации заказа до его передачи в СД
- Добавлена возможность отменять заказ в СД
- Добавлена возможность указать шаблон отображения способа доставки в корзине
- Добавлена возможность указать способ и пункт приема для каждой СД
- Добавлена возможность указать вес и габариты грузоместа по умолчанию
- Добавлена возможность пройти авторизацию в ApiShip по токену
- Добавлено отображение истории статусов доставки на странице работы с заказом
- Добавлено отображение трек номера на странице работы с заказом
- Добавлен функционал синхронизации статусов и настройка из сопоставления
- Изменено расположение кнопки выбора ПВЗ в корзине
- Убрана возможность пройти авторизацию в ApiShip по логину и паролю
- Исправлена ошибка передачи стоимости доставки с получателя
- Добавлено использование
ceilдля предотвращения передачи в запросе дробных размеров. - Добавлено логирование в случае пустого
$response_body. - Добавлены переносы строк в карточку Транспортной Компании на странице заказа.
- Исправлены синтаксические ошибки.
- Удалена инициализация константы
WP_APISHIP_SHIPPING_CACHE.
- Добавлена опция выбора Транспортных Компаний которые будут выводится на странице checkout.
- Обход кэша тарифов доставки в соответствии с опцией Woocommerce
Режим отладки. - Добавлен перевод кнопки
Selectдля Яндекс карт на фронт-енд. - Центрирование Яндекс карты в соответствии с выбранным ПВЗ.
- Исправлено PHP Notice: Undefined variable: response_body in includes/class-wp-apiship-shipping-method.php
- Первая версия.
- Промежуточный RC.
- Установлено значение
pickupTypeв классеWP_ApiShip_Orderпо умолчанию для случая переданного значения в запросе1,2. - Добавлена возможность удаления данных Пункта приёма заказа.
- Добавлен фильтр
codв запросlists/pointsдля Яндекс карт на фронт-енд. - Добавлены переводы на странице настроек плагина.
- Добавлено сообщение если Yandex карты не загружены (админ).
- Исправлена ошибка в метабоксе если не выбрана Point In по умолчанию.
- Добавлено поле адреса Point Out для пользователя на странице checkout.
- Добавлена кнопка закрытия карты Points Out для пользователя на странице checkout.
- Обновлены переводы на странице настроек плагина.
- Обновлены подсказки на странице
Службы доставки. - Изменён алгоритм работы с мета данными метода
add_rateклассаWP_ApiShip_Shipping_Method. - Добавлена пакетная печать наклеек.
- Добавлено предупреждение об отсутствии установки ПВЗ по умолчанию на карточке ТК.
- Добавлен вывод
Тип доставкив информации о тарифе. - Изменён алгоритм центрирования карт перед выбором ПВЗ.
- Изменён алгоритм редактирования данных пунктов приёма/выдачи заказов.
- Изменён алгоритм сохранения/загрузки данных контактного лица.
- Добавлена карта выбора ПВЗ на странице
checkoutдля тарифов с доставкой в ПВЗ. - Добавлена секция
Пункт выдачи заказав метабоксе ApiShip с возможностью смены ПВЗ на карте. - Добавлена возможность перехода на страницу
Службы Доставкисо страницыЗаказкликом по лого транспортной компании. - Номер заказа в метабоксе ApiShip выведен в поле с типом
text.
- Добавлена возможность выбора/отмены предпочитаемых служб доставки на странице
Службы Доставки. - Добавлена возможность установки пунктов приёма отправлений на странице
Службы Доставкидля магазина/склада. - Обновлена секция информации о службе доставки в метабоксе ApiShip.
- Добавлена секция
Пункт приёма заказас возможностью изменений адресов в метабоксе ApiShip. - Добавлена смена места отгрузки магазин/склад (в зависимости от настроек) в секции
Отправительв метабоксе ApiShip.
- Добавлена константа
WP_APISHIP_SHIPPING_CACHEсо значением false|true для отмены|разрешения кеширования при тестировании. - Добавлен метабокс для деталей заказа и кнопками действий.
- Добавлена иконка предупреждения о наличии заказа в системе ApiShip, но без информации в плагине.
- Исправлены ошибки в запросах API.
- Добавлено свойство $timeout в класс WP_ApiShip_HTTP.
- Добавлено кэширование запросов калькуляции доставки.
- Согласование настройки опции Country/State в адресе склада с основной опцией Woocommerce Country/State.
- Вывод сообщения об ошибке в секции Providers в случае ошибки в ответе API.
- В окно Tools добавлены запросы для удаления/отмены существующего заказа ApiShip.
- Добавлен расчёт общего веса в классе
WP_ApiShip_Order. - Добавлен перерасчёт стоимости доставки для каждого метода платежа:
Прямой банковский перевод,Оплата при доставкена страницеcheckout. - Добавлен JS скрипт для фронт-енд.
- Добавлена возмжность загрузки минифицированных скриптов JS,CSS.
- Добавлена опция
includeFeesна странице настроек. - Добавлена опция
includeFeesв запросе на калькуляцию. - Добавлена кнопка тестирования подключения к API на странице настроек.
- Добавлены переводы настроек ru_RU.
- Исправления в запросе на калькуляцию (кроме опции
includeFees) - Исправления в запросе на создание/редактирование заказа
- Добавлен метабокс ApiShip на странице заказа.
- Updates as 29.03.2022
- Updates as 24.03.2022
- Added many updates.
- Init commits.