WordPress Cron — jak działa WP-Cron, dlaczego spowalnia stronę i jak go zastąpić systemowym cronem
Opublikowano: 20 marca 2026 · Autor: Marcin Szewczyk-Wilgan
WordPress ma wbudowany mechanizm planowania zadań w tle — WP-Cron. Odpowiada za publikowanie zaplanowanych postów, sprawdzanie aktualizacji, wykonywanie kopii zapasowych, wysyłkę newsletterów i dziesiątki innych operacji. Problem w tym, że WP-Cron nie jest prawdziwym cronem — nie działa ciągle, lecz uruchamia się tylko wtedy, gdy ktoś odwiedzi stronę. To oznacza dwa scenariusze: na stronach z małym ruchem zadania się opóźniają, a na stronach z dużym ruchem — każde ładowanie strony obciąża serwer dodatkowym sprawdzaniem bazy danych. Rozwiązanie jest proste i zalecane nawet przez oficjalną dokumentację WordPress: wyłączyć WP-Cron i zastąpić go systemowym cronem.
Jak działa WP-Cron
WP-Cron to „wirtualny cron" — emulacja systemowego crona zaimplementowana w PHP. Został zaprojektowany w czasach, gdy WordPress działał głównie na shared hostingu bez dostępu do systemowego crontab.
Problemy WP-Cron z wydajnością
WP-Cron został zaprojektowany jako pragmatyczne rozwiązanie dla ograniczonych środowisk hostingowych. Na nowoczesnych stronach z ruchem, cache i wymaganiami wydajnościowymi — staje się problemem.
Obciążenie przy każdym ładowaniu
Każde wyświetlenie strony triggeruje sprawdzenie bazy danych pod kątem zadań cron. Na stronie z 10 000 wizyt dziennie to 10 000 dodatkowych zapytań SQL. Jeśli brakuje wolnych procesów PHP-FPM, cron czeka w kolejce, blokując odpowiedź dla użytkownika. To mierzalny wpływ na TTFB.
Zadania się nie uruchamiają
Blog z kilkunastoma wizytami dziennie — zaplanowany post na 8:00 rano nie opublikuje się, jeśli pierwszy odwiedzający pojawi się o 12:00. Kopie zapasowe, sprawdzanie aktualizacji, synchronizacja — wszystko czeka na wizytę. To niewiarygodne dla operacji krytycznych czasowo.
Konflikt z cache stron
Wtyczki cache serwują strony statycznie, omijając PHP. Jeśli większość żądań trafia do cache — WP-Cron nie jest triggerowany. Zadania się kumulują i uruchamiają nagle, gdy ktoś trafi na niecache'owaną stronę — powodując spike obciążenia serwera.
Publiczny endpoint
Plik wp-cron.php jest publicznie dostępny. Boty mogą go wywoływać wielokrotnie, wymuszając powtarzane sprawdzanie i uruchamianie zadań. To zużywa zasoby serwera i może prowadzić do duplikowania operacji — np. podwójnej wysyłki maili czy wielokrotnych backupów.
Rozwiązanie: wyłączenie WP-Cron i konfiguracja systemowego crona
Oficjalna dokumentacja WordPress (Plugin Handbook) zaleca wyłączenie WP-Cron i zastąpienie go systemowym cronem. To operacja prosta, bezpieczna i dająca natychmiastowy efekt. Oto procedura krok po kroku:
Kiedy optymalizacja WP-Cron ma sens
Nie każda strona wymaga pełnej zamiany WP-Cron na systemowy cron. Oto scenariusze, w których optymalizacja jest kluczowa:
Podsumowanie
WP-Cron to pragmatyczne rozwiązanie z ery shared hostingu — ale na nowoczesnych stronach WordPress z ruchem, cache i wymaganiami wydajnościowymi staje się obciążeniem. Wyłączenie WP-Cron i zastąpienie go systemowym cronem to jedna z najprostszych i najbardziej efektywnych optymalizacji WordPressa. Operacja zajmuje kilka minut, jest zalecana przez oficjalną dokumentację i daje natychmiastowy efekt — przewidywalne uruchamianie zadań, mniejsze obciążenie serwera i lepszy TTFB.
W WebOptimo konfiguracja systemowego crona to standardowy element wdrożenia i opieki WordPress. Optymalizujemy harmonogram zadań, monitorujemy ich wykonanie i eliminujemy zbędne wpisy cron pozostawione przez usunięte wtyczki. Skontaktuj się z nami lub sprawdź ofertę opieki WordPress i administracji serwerem.
Najczęstsze pytania o WordPress Cron
WP-Cron to wbudowany mechanizm WordPress do planowania zadań — publikowanie postów, backupy, aktualizacje, maile. Nie jest prawdziwym cronem — uruchamia się tylko przy ładowaniu strony przez użytkownika.
Każde ładowanie strony triggeruje sprawdzenie bazy danych pod kątem zadań cron. Na stronach z dużym ruchem to tysiące dodatkowych zapytań SQL. Konflikt z cache — strony cache'owane omijają PHP, więc cron się nie uruchamia.
Dodaj define('DISABLE_WP_CRON', true); w wp-config.php. Po wyłączeniu natychmiast skonfiguruj systemowy cron — inaczej zaplanowane zadania przestaną działać.
W crontab serwera (SSH lub panel hostingu) dodaj zadanie wywołujące wp-cron.php co 5–15 minut. Komenda: */15 * * * * wget -q -O - https://domena.pl/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Tak — pod warunkiem konfiguracji systemowego crona jako zastępstwa. To podejście jest zalecane przez oficjalną dokumentację WordPress. Systemowy cron jest bardziej niezawodny i nie obciąża strony.