Проблема: статус «Оплаченное» отображается в фильтрах заказов WooCommerce без нужды
В стандартной админке WooCommerce в списке заказов есть фильтр по статусам заказов. Иногда появляется необходимость убрать из этого списка определённые статусы, например, «Оплаченное» ("processing" или "completed"), если вы используете кастомные статусы или хотите упростить интерфейс для менеджеров.
Но WooCommerce не предоставляет удобного UI для этого, поэтому требуется вмешательство через код.
Диагностика проблемы
Для начала уточним, что именно выводится в фильтре заказов:
- Стандартные статусы WooCommerce: pending, processing, on-hold, completed, cancelled, refunded, failed.
- Иногда добавляются кастомные статусы.
Если в фильтре присутствует статус, который вы не хотите видеть, можно проверить, откуда он берётся. Фильтр статусов формируется в функции wc_get_order_statuses(), которая возвращает массив статусов с префиксом wc-.
Как проверить, какие статусы выводятся в фильтре
add_action('restrict_manage_posts', function() {
if (get_post_type() !== 'shop_order') {
return;
}
$statuses = wc_get_order_statuses();
echo '<pre>';
print_r($statuses);
echo '</pre>';
});После добавления этого кода в functions.php вы увидите массив статусов в админке заказов.
Пошаговое решение: убрать статус из фильтра заказов
Чтобы убрать статус, нужно отфильтровать список статусов, который возвращает WooCommerce, используя хук 'woocommerce_order_statuses'.
Пример кода для удаления статуса completed из списка фильтров:
add_filter('woocommerce_order_statuses', 'remove_completed_status_from_order_filter');
function remove_completed_status_from_order_filter($order_statuses) {
if (isset($order_statuses['wc-completed'])) {
unset($order_statuses['wc-completed']);
}
return $order_statuses;
}Подставьте нужный статус, например, wc-processing для «Обрабатывается» или любой другой.
Удаление нескольких статусов
add_filter('woocommerce_order_statuses', 'remove_multiple_statuses_from_order_filter');
function remove_multiple_statuses_from_order_filter($order_statuses) {
$remove = ['wc-completed', 'wc-processing'];
foreach ($remove as $status) {
if (isset($order_statuses[$status])) {
unset($order_statuses[$status]);
}
}
return $order_statuses;
}Проверка результата
После добавления кода в functions.php или в кастомный плагин:
- Зайдите в админку WordPress → WooCommerce → Заказы.
- В верхней части страницы найдите выпадающий список фильтра по статусам заказов.
- Проверьте, что статус «Оплаченное» (например, Completed) исчез из списка.
- Попробуйте отфильтровать заказы по другим статусам, чтобы убедиться, что остальные работают корректно.
Частые ошибки и как исправить
- Неправильный ключ статуса: WooCommerce использует ключи с префиксом
wc-, например,wc-completed. Проверяйте точное имя черезwc_get_order_statuses(). - Кэширование админки: Иногда изменения не видны из-за кэша браузера или серверного кэша. Очистите кэш и перезагрузите страницу.
- Конфликты с плагинами: Некоторые плагины могут переопределять список статусов. Проверьте, не мешают ли сторонние расширения.
- Добавление кода в неправильное место: Код нужно добавлять в файл
functions.phpвашей активной темы или в кастомный плагин, а не в шаблон темы.
Практические советы по безопасности и производительности
- Добавляйте код только в дочернюю тему или кастомный плагин, чтобы избежать потерь при обновлении.
- Минимизируйте количество хуков, чтобы не замедлять загрузку админки.
- Тестируйте изменения на тестовом сайте перед применением в продакшене.
Сравнение способов скрытия статусов в фильтре WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
Фильтр woocommerce_order_statuses | Простой, быстрое решение без плагинов | Требует знания правильных ключей, может конфликтовать с плагинами |
| Использование плагина кастомизации админки | Удобный UI, расширенные настройки | Дополнительная нагрузка, может быть избыточно |
| Изменение шаблонов WooCommerce | Полный контроль над выводом | Сложнее в поддержке, требует обновления при апдейтах |