wpmoney.ru wordpress WP Money

Как удалить автоматические подписки на обновления в WooCommerce через код

Диагностика проблемы: зачем отключать автоматические уведомления WooCommerce

WooCommerce по умолчанию отправляет уведомления о различных событиях — обновлениях плагинов, тем, обновлениях статусов заказов, подписках и т.д. Иногда в магазине накапливается слишком много автоматических писем, которые не всегда нужны или мешают. Особенно это касается уведомлений о подписках на обновления, которые могут раздражать администратора или владельца магазина, если используются внешние инструменты для обновления или кастомные решения.

Часто пользователи жалуются, что не могут отключить часть уведомлений через настройки WooCommerce или WordPress, потому что они жестко заданы в коде. В таких случаях помогает программное удаление подписок или хук, который отменяет регистрацию уведомлений.

Где WooCommerce регистрирует подписки на обновления и как их найти

Автоматические подписки в WooCommerce часто реализованы через стандартные хуки WordPress и функционал планировщика событий WP-Cron. Например, для подписок на обновления статуса заказа используется хук woocommerce_order_status_changed, для обновлений плагинов и тем — события WP-Cron и фильтры на уровне WordPress.

Чтобы понять, какие именно подписки нужно отключать, необходимо:

  • Проверить активные хуки через плагин Query Monitor или Debug Bar.
  • Посмотреть список запланированных задач WP-Cron с помощью плагина WP Crontrol или команды WP-CLI wp cron event list.
  • Изучить документацию и исходный код плагинов WooCommerce и связанных расширений, которые могут добавлять свои подписки.

Пошаговое решение: отключение автоматических подписок на обновления через код

1. Отключаем события WP-Cron, связанные с уведомлениями

Для удаления автоматических подписок на обновления, можно воспользоваться функцией wp_clear_scheduled_hook(). Например, чтобы удалить событие, которое отвечает за обновление подписок, добавьте следующий код в файл functions.php темы или в отдельный плагин:

function wpmoney_remove_woocommerce_update_hooks() {
    // Пример: отключаем событие обновления подписок WooCommerce
    wp_clear_scheduled_hook('woocommerce_scheduled_subscription_expiration_reminder');
    wp_clear_scheduled_hook('woocommerce_scheduled_subscription_trial_expiring_reminder');
    wp_clear_scheduled_hook('woocommerce_scheduled_subscription_payment_retry');
}
add_action('init', 'wpmoney_remove_woocommerce_update_hooks');

Этот код удалит запланированные события, которые отвечают за автоматическую рассылку уведомлений по подпискам.

2. Отменяем регистрацию хука уведомлений о статусах заказов

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

function wpmoney_disable_order_status_notifications() {
    remove_action('woocommerce_order_status_changed', 'woocommerce_order_status_changed_notification', 10, 4);
}
add_action('init', 'wpmoney_disable_order_status_notifications');

Обратите внимание, что имя функции woocommerce_order_status_changed_notification — пример. В вашем случае нужно узнать точное имя функции, которая отвечает за отправку уведомлений. Это можно сделать через поиск по коду WooCommerce или с помощью отладчика.

3. Отключаем уведомления WooCommerce о доступных обновлениях

WooCommerce может показывать уведомления о доступных обновлениях плагинов и тем. Их можно скрыть так:

add_filter('woocommerce_helper_suppress_admin_notices', '__return_true');

Это не удалит подписки, но скроет уведомления в админке.

Проверка результата после внедрения

Чтобы убедиться, что автоматические подписки и уведомления отключены и больше не работают:

  • Проверьте список запланированных задач WP-Cron через WP Crontrol или wp cron event list. События, которые вы удалили, должны отсутствовать.
  • Создайте тестовый заказ и измените его статус, чтобы проверить, отправляются ли уведомления.
  • Отслеживайте email-ящик администратора для отсутствия писем по отключенным событиям.

Частые ошибки и как исправить

  • Неправильное имя функции для удаления хука. Если функция, которую пытаетесь удалить с помощью remove_action, не указана точно, удаление не сработает. Используйте поиск по коду WooCommerce и подключённых плагинов, чтобы найти правильное имя.
  • Код не выполняется на нужном хуке. Если удаляете хук слишком рано или слишком поздно (например, вне init), удаление может не работать. Рекомендуется использовать init с приоритетом 10 или выше.
  • Запланированные задачи уже созданы и не удаляются. Иногда нужно удалить задачи вручную через WP-CLI или плагин WP Crontrol, так как wp_clear_scheduled_hook не удаляет уже запущенные события.

Практические советы по безопасности и производительности

  • Отключение ненужных автоматических подписок снижает нагрузку на сервер и уменьшает спам в почте.
  • Регулярно мониторьте задачи WP-Cron, чтобы избежать накопления устаревших событий.
  • Используйте кастомные плагины или темы для внесения изменений, чтобы не потерять их при обновлении WooCommerce.
  • Перед внесением изменений сделайте резервную копию сайта и базы данных.

Сравнение способов отключения подписок в WooCommerce

МетодОписаниеПлюсыМинусы
Удаление WP-Cron событийУдаляет запланированные задачи рассылкиПолностью останавливает автоматические письмаТребует точного знания названий событий
Удаление хуков с помощью remove_actionОтменяет регистрацию функций уведомленийГибко управляет конкретными уведомлениямиНужно знать точные имена функций
Скрытие уведомлений в админкеФильтр для отключения админских сообщенийПростое решение без удаления функцийНе отключает подписки и письма, только скрывает уведомления
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙