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.