Функция wp_unschedule_hook()
в WordPress позволяет отменить все запланированные задачи, связанные с определенным хуком. Это особенно полезно при деактивации плагинов или в случаях, когда нужно очистить расписание WP Cron от задач, которые больше не актуальны.
wp_unschedule_hook( string $hook, bool $wp_error = false ): int|false|WP_Error
Параметры
- $hook (string, обязательный): Название хука, все события которого должны быть удалены из расписания.
- $wp_error (bool, необязательный): Если установлено в
true
, функция вернет объектWP_Error
при неудаче. По умолчаниюfalse
.
Возвращаемое значение
- int: Количество удаленных событий, если задача успешно выполнена.
- false: Если удаление задачи не удалось.
- WP_Error: Объект ошибки, если опция
$wp_error
установлена вtrue
и возникла ошибка.
Применение
Функция полезна для плагинов и тем, когда необходимо удалить все задачи, связанные с определенным хуком, например, при деактивации плагина. В отличие от wp_unschedule_event()
, которая удаляет только одну задачу с указанными параметрами, wp_unschedule_hook()
убирает все задачи, связанные с конкретным хуком, независимо от параметров.роверки успешности операции рекомендуется использовать строгое сравнение ===
.
Пример 1: Удаление всех cron-событий по определенному хуку
Допустим, у нас есть запланированное событие с хуком my_custom_cron_task
. Чтобы удалить все связанные с этим хуком события, используем следующий код:
wp_unschedule_hook('my_custom_cron_task');
Этот вызов отменит все задачи, связанные с хуком my_custom_cron_task
, независимо от того, какие параметры были использованы при их регистрации.
Пример 2: Очистка cron при деактивации плагина
Когда плагин деактивируется, важно удалить все запланированные события cron, чтобы предотвратить их выполнение в будущем.
register_deactivation_hook( __FILE__, 'plugin_deactivation_cleanup' );
function plugin_deactivation_cleanup() {
wp_unschedule_hook( 'daily_backup_event' );
}
Пример 3: Создание и удаление задачи при активации и деактивации плагина
Следующий пример демонстрирует, как при активации плагина создать крон-задачу, а при его деактивации — удалить все связанные с ней задачи:
// Активируем плагин
register_activation_hook(__FILE__, 'my_plugin_activation');
function my_plugin_activation() {
// На всякий случай удаляем все задачи с хуком 'my_hourly_event', если они уже существуют
wp_unschedule_hook('my_hourly_event');
// Создаем новую крон-задачу, которая выполняется каждый час
if (!wp_next_scheduled('my_hourly_event')) {
wp_schedule_event(time(), 'hourly', 'my_hourly_event');
}
}
// Деактивируем плагин
register_deactivation_hook(__FILE__, 'my_plugin_deactivation');
function my_plugin_deactivation() {
// Удаляем все задачи с хуком 'my_hourly_event'
wp_unschedule_hook('my_hourly_event');
}
Использование в реальной жизни
Когда разработчики плагинов добавляют события cron, они также должны обеспечивать их корректное удаление при деактивации плагина. Это позволяет избежать лишней нагрузки на сервер и проблем, связанных с выполнением устаревших задач.
Заключение
Функция wp_unschedule_hook() удобна для удаления всех запланированных задач, связанных с конкретным хуком, что особенно полезно при разработке плагинов. Она позволяет легко управлять крон-задачами и избегать накопления ненужных процессов в системе.