Jak tworzyć harmonogramy zadań (WP-Cron) w WordPressie

Czasami chcesz, aby WordPress automatycznie wykonywał pewne działania – np. wysyłał e-maile, czyścił stare wpisy, importował dane lub generował raporty.
Nie potrzebujesz zewnętrznego crona na serwerze – wystarczy wbudowany w system WP-Cron.

W tym poradniku pokażę Ci, jak krok po kroku tworzyć własne zadania cron w WordPressie, planować ich uruchamianie i debugować ewentualne problemy.


Czym jest WP-Cron?

WP-Cron to wewnętrzny system harmonogramu zadań WordPressa, który działa przy każdym wejściu użytkownika na stronę.
Jeśli strona ma ruch, WordPress sprawdza, czy są zaplanowane jakieś zadania do wykonania – i jeśli tak, uruchamia je w tle.

Zalety:

  • Nie wymaga dostępu do systemowego crona,
  • Działa automatycznie po stronie WordPressa,
  • Może uruchamiać własne funkcje w określonych odstępach czasu.

Wady:

  • Nie działa, jeśli nikt nie odwiedza strony,
  • Nie nadaje się do bardzo precyzyjnych zadań (np. co minutę).

Krok 1: Zarejestruj własne zdarzenie WP-Cron

Dodaj do pliku functions.php lub własnej wtyczki:

// Rejestracja zdarzenia cron (np. co godzinę)
if ( ! wp_next_scheduled( 'pp_custom_cron_event' ) ) {
    wp_schedule_event( time(), 'hourly', 'pp_custom_cron_event' );
}

Ten kod tworzy zdarzenie o nazwie pp_custom_cron_event, które będzie wywoływane co godzinę.


Krok 2: Zdefiniuj funkcję, która ma się uruchamiać

Teraz określ, co WordPress ma zrobić przy każdym uruchomieniu zdarzenia:

add_action( 'pp_custom_cron_event', 'pp_custom_cron_function' );

function pp_custom_cron_function() {
    // Tu wpisz logikę zadania
    error_log( 'Cron działa! Wykonano o: ' . date( 'H:i:s' ) );
}

W powyższym przykładzie funkcja zapisuje wpis do loga – ale możesz tu wstawić dowolny kod: wysyłkę maila, czyszczenie bazy, pobieranie danych z API itp.


Krok 3: Tworzenie niestandardowych interwałów

Domyślnie WordPress obsługuje tylko trzy interwały:

  • hourly (co godzinę),
  • twicedaily (dwa razy dziennie),
  • daily (raz dziennie).

Możesz jednak dodać własny:

add_filter( 'cron_schedules', 'pp_add_custom_cron_interval' );

function pp_add_custom_cron_interval( $schedules ) {
    $schedules['every_five_minutes'] = [
        'interval' => 300, // 300 sekund = 5 minut
        'display'  => __( 'Co 5 minut' ),
    ];
    return $schedules;
}

A następnie użyć tego interwału przy planowaniu:

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

Krok 4: Jak usunąć zaplanowane zdarzenie

Zdarzenia cron nie usuwają się automatycznie po wyłączeniu kodu.
Jeśli chcesz wyczyścić harmonogram:

$timestamp = wp_next_scheduled( 'pp_custom_cron_event' );
if ( $timestamp ) {
    wp_unschedule_event( $timestamp, 'pp_custom_cron_event' );
}

To przyda się np. podczas testów lub dezaktywacji wtyczki.


Krok 5: Jak sprawdzić, czy WP-Cron działa

Jeśli zadania się nie wykonują:

  • Upewnij się, że opcja DISABLE_WP_CRON nie jest ustawiona na true w wp-config.php.
  • Możesz ręcznie wywołać crona w przeglądarce, wchodząc na: https://twojastrona.pl/wp-cron.php?doing_wp_cron
  • Do debugowania przydaje się wtyczka WP Crontrol, która pokazuje wszystkie zaplanowane zdarzenia.

Bonus: WP-Cron a prawdziwy cron systemowy

Jeśli Twoja strona ma mały ruch, lepiej wyłączyć wbudowanego crona i uruchamiać go z systemowego cron joba na serwerze:

W wp-config.php:

define( 'DISABLE_WP_CRON', true );

A następnie dodaj w systemowym cronie (np. w DirectAdminie lub cPanelu):

wget -q -O - https://twojastrona.pl/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Dzięki temu cron będzie działał niezależnie od odwiedzin użytkowników.


Podsumowanie

WP-Cron to potężny mechanizm, który pozwala automatyzować zadania w WordPressie – od czyszczenia bazy, po synchronizację danych.
Z jego pomocą możesz tworzyć w pełni autonomiczne procesy, bez konieczności instalowania dodatkowych wtyczek.

KROK 1 Z 4

Z CZYM POTRZEBUJESZ POMOCY?