wp-code.ru wordpress WP-Codе

Создать и использовать автоматические задачи в WordPress без плагинов

В WordPress часто требуется выполнять периодические задачи, например, очистку базы данных, отправку рассылок или обновление информации. Обычно для этого используют плагины, но иногда хочется обойтись без них, чтобы снизить нагрузку, избежать конфликтов и повысить безопасность. В этой статье разберём, как создать и использовать автоматические задачи (cron jobs) в WordPress без плагинов, используя встроенный механизм WP-Cron и системные cron-задания.

Что такое WP-Cron и как он работает в WordPress

WP-Cron — это собственный планировщик задач WordPress, который имитирует работу системного cron. Он запускается при каждом посещении сайта: если настало время для выполнения запланированной задачи, она выполняется в этот момент. Это удобно, но имеет недостатки:

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

Чтобы обойти эти ограничения, можно отключить встроенный WP-Cron и настроить системный cron на сервере для вызова wp-cron.php по расписанию.

Отключение WP-Cron и настройка системного cron

Для отключения автоматического запуска WP-Cron при посещении сайта добавьте в wp-config.php строку:

define('DISABLE_WP_CRON', true);

Далее создайте системное cron-задание на сервере, которое будет вызывать скрипт wp-cron.php с нужной периодичностью, например, каждую минуту:

* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
<

Или через curl:

* * * * * curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

Как создавать и регистрировать свои задачи в WP-Cron

Чтобы добавить новую задачу, нужно зарегистрировать событие и назначить функцию-обработчик. В WordPress для этого есть функции wp_schedule_event, add_action и wp_clear_scheduled_hook.

Пример: создадим задачу, которая будет запускаться раз в час и выполнять нужные действия.

function wpcode_schedule_my_task() {
    if (!wp_next_scheduled('wpcode_hourly_task_hook')) {
        wp_schedule_event(time(), 'hourly', 'wpcode_hourly_task_hook');
    }
}
add_action('wp', 'wpcode_schedule_my_task');

function wpcode_do_hourly_task() {
    // Ваш код, который необходимо выполнять каждый час
    error_log('WPCode: Часовая задача выполнена в ' . current_time('mysql'));
}
add_action('wpcode_hourly_task_hook', 'wpcode_do_hourly_task');

Объяснение кода:

  • wpcode_schedule_my_task проверяет, есть ли уже запланированное событие wpcode_hourly_task_hook. Если нет — создаёт его.
  • Событие запускается раз в час (аргумент hourly — встроенный интервал).
  • wpcode_do_hourly_task — функция, которая будет вызвана при запуске события. Здесь можно размещать любой код.

Добавление пользовательских интервалов для расписания WP-Cron

По умолчанию доступны интервалы: hourly (час), twicedaily (12 часов), daily (сутки). Если нужен свой интервал, добавьте фильтр:

function wpcode_custom_cron_intervals($schedules) {
    $schedules['every_five_minutes'] = array(
        'interval' => 300, // 300 секунд = 5 минут
        'display' => __('Каждые 5 минут')
    );
    return $schedules;
}
add_filter('cron_schedules', 'wpcode_custom_cron_intervals');

Теперь можно использовать этот интервал при планировании:

wp_schedule_event(time(), 'every_five_minutes', 'wpcode_five_minute_task_hook');

Примеры полезных автоматических задач для WordPress

Ниже — несколько идей, которые можно реализовать через автоматические задачи без плагинов.

1. Очистка временных данных и транзиентов

Транзиенты — временные данные для кеширования. Их нужно периодически очищать, чтобы не засорять базу.

function wpcode_clear_expired_transients() {
    global $wpdb;
    $time = time();
    $transients = $wpdb->get_col("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < $time");
    foreach ($transients as $transient) {
        $key = str_replace('_transient_timeout_', '', $transient);
        delete_transient($key);
    }
    error_log('WPCode: Очистка транзиентов выполнена');
}
add_action('wpcode_daily_task_hook', 'wpcode_clear_expired_transients');

Эту функцию можно запланировать на ежедневный запуск.

2. Автоматический экспорт данных

Например, экспорт заказов WooCommerce для бухгалтерии.

function wpcode_export_wc_orders() {
    if (!class_exists('WooCommerce')) {
        return;
    }
    // Здесь можно добавить код для выборки и экспорта заказов в CSV или XML
    error_log('WPCode: Экспорт заказов WooCommerce выполнен');
}
add_action('wpcode_daily_task_hook', 'wpcode_export_wc_orders');

Отладка и проверка работы автоматических задач

Чтобы проверить, что задача запланирована, используйте функцию wp_next_scheduled:

$next_time = wp_next_scheduled('wpcode_hourly_task_hook');
if ($next_time) {
    echo 'Следующий запуск: ' . date('Y-m-d H:i:s', $next_time);
} else {
    echo 'Задача не запланирована';
}

Для принудительного запуска задачи можно использовать функцию do_action:

do_action('wpcode_hourly_task_hook');

Также рекомендуем вести логирование в файлы или использовать error_log для отладки.

Использование WP-Cron с плагином Clearfy Pro для оптимизации

Плагин Clearfy Pro помогает оптимизировать работу WP-Cron: отключить ненужные задачи, управлять расписанием и повышать производительность сайта. Подробнее о плагине и его возможностях можно узнать на wpshop.ru.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше