Jak skonfigurować prawdziwy cron serwera dla WordPressa (zamiast wp-cron.php)
WordPress domyślnie nie ma własnego, działającego w tle harmonogramu zadań. Zamiast tego przy każdym wejściu odwiedzającego na stronę sprawdza plik wp-cron.php i jeśli widzi zaległe zadania – publikację zaplanowanego wpisu, wysyłkę newslettera przez wtyczkę, czyszczenie cache, aktualizację wtyczek w tle czy kopię zapasową – wykonuje je. Problem w tym, że mechanizm ten uruchamia się tylko wtedy, gdy ktoś faktycznie wejdzie na stronę. Jeśli ruch jest niewielki, zaplanowany wpis może opublikować się kilka godzin po terminie, a zadania wtyczek w ogóle nie wykonają się o czasie. Rozwiązaniem jest wyłączenie domyślnego wp-cron i zastąpienie go prawdziwym zadaniem cron ustawionym w panelu hostingowym, które odpytuje wp-cron.php regularnie, niezależnie od tego, czy ktoś odwiedza stronę.
- Sprawdź, czy ten problem faktycznie dotyczy Twojej strony. Zaplanuj testowy wpis na najbliższe kilkanaście minut i obserwuj, czy opublikuje się punktualnie. Możesz też zainstalować bezpłatną wtyczkę WP Crontrol, wejść w listę zaplanowanych zadań i sprawdzić kolumnę z czasem następnego wykonania – jeśli widzisz tam godziny z przeszłości, zadania czekają na kogoś, kto wejdzie na stronę i je „odblokuje”.
- Zlokalizuj plik
wp-config.php. Znajdziesz go w głównym katalogu instalacji WordPressa, na tym samym poziomie co folderywp-admin,wp-contentiwp-includes. Otwórz go przez menedżer plików w panelu hostingowym albo przez klienta FTP, np. FileZillę. - Dodaj linię wyłączającą domyślny wp-cron. W pliku
wp-config.phpwklej:define('DISABLE_WP_CRON', true);. Umieść ją przed liniąrequire_once ABSPATH . 'wp-settings.php';lub przed komentarzem „That's all, stop editing!”. Od tego momentu WordPress nie będzie już próbował uruchamiać zadań przy odwiedzinach strony. - Zapisz plik i wgraj go z powrotem na serwer. W menedżerze plików hostingu wystarczy kliknięcie „Zapisz”. Jeśli edytowałeś plik lokalnie przez FTP, wgraj go z powrotem, nadpisując wersję na serwerze.
- Zaloguj się do panelu hostingowego i znajdź sekcję zadań cron. W cPanelu szukaj „Cron Jobs” w części „Advanced”, w DirectAdmin „Zadania Cron”, a w Plesku „Planowane zadania”. Nazwa różni się między panelami, ale funkcja jest ta sama.
- Skonfiguruj nowe zadanie cron wywołujące wp-cron.php co 15 minut. Ustaw harmonogram na „Every 15 Minutes” (odpowiada to wzorcowi
*/15 * * * *), a w polu z poleceniem wpisz jedno z:wget -q -O /dev/null "https://twojadomena.pl/wp-cron.php"albocurl -s "https://twojadomena.pl/wp-cron.php" > /dev/null 2>&1. Pamiętaj, żeby zamienićtwojadomena.plna rzeczywisty adres swojej strony. - Zapisz zadanie i przetestuj, czy działa. Poczekaj 15–20 minut, zaplanuj kolejny testowy wpis na konkretną godzinę i sprawdź, czy opublikował się zgodnie z planem. We WP Crontrol czasy „następnego wykonania” powinny teraz aktualizować się regularnie, nawet gdy nikt nie wchodzi na stronę.
Co zrobić, gdy coś pójdzie nie tak
Hosting nie udostępnia sekcji Cron Jobs w panelu. Niektóre tańsze pakiety hostingowe nie dają dostępu do zadań cron z poziomu panelu klienta. W takiej sytuacji możesz skonfigurować darmowy zewnętrzny serwis typu cron-job.org, który będzie odpytywał adres https://twojadomena.pl/wp-cron.php w ustalonych odstępach czasu z zewnątrz – efekt jest taki sam. Możesz też zapytać wsparcie techniczne hostingu, czy funkcja jest dostępna pod inną nazwą albo czy da się ją włączyć na żądanie.
Błąd uprawnień przy zapisie wp-config.php. Jeśli menedżer plików albo klient FTP zgłasza „Permission denied”, sprawdź uprawnienia pliku – standardowo powinny wynosić 644. Jeśli nie możesz ich zmienić samodzielnie, zgłoś to do wsparcia hostingu; sam plik jest zbyt ważny, żeby zmieniać uprawnienia na bardziej otwarte „na wszelki wypadek”.
Zadania wciąż nie wykonują się o czasie po wprowadzeniu zmian. Najpierw sprawdź literówkę w adresie URL w poleceniu cron – brakujące „https” albo błędna domena to częsty powód. Następnie sprawdź, czy linia z DISABLE_WP_CRON rzeczywiście trafiła przed komentarz „stop editing”, a nie np. do sekcji komentarza, gdzie nie zostanie wykonana. Jeśli polecenie z wget lub curl nie działa, bo hosting blokuje wychodzące połączenia do własnej domeny, zamień je na wywołanie pliku PHP bezpośrednio z serwera, np. php /home/twojlogin/public_html/wp-cron.php – dokładną ścieżkę do katalogu z WordPressem podaje panel hostingowy lub wsparcie techniczne.