WP-Cron – harmonogram zadań w WordPress

WordPress w standardzie ma zaimplementowaną funkcję harmonogramu – nazywanego też cronem. Dzięki temu możemy zaplanować zadania, które będą uruchamiać się co pewien określony czas. W moim wypadku wykorzystałem WordPressowy Cron do pobierania, co godzinę tweetów i zapisywanie ich do pliku.

Wady i zalety WP-Cron

WordPress wykorzystuje harmonogram zadań do sprawdzania aktualizacji wtyczek i skórek, publikowania postów, wysyłania pingbacków oraz kilku innych. Musi on, więc być wywoływany niezależnie od serwera, na jakim się znajduje. Deweloperzy WordPressa postanowili, że cron uruchamiać się będzie za każdym razem, gdy wywoływana jest strona. Nie trzeba więc, dodawać zadań związanych z Wordpresem do harmonogramu serwera podczas instalacji. Dzięki temu instalacja jest prosta i może ją wykonać nawet niedoświadczony użytkownik. Pozwala to także twórcom wtyczek i motywów mieć pewność, że harmonogram zawsze działa. Dlatego wiele osób nazywa WP-Cron pseudo harmonogramem.

Ponieważ każde otwarcie strony uruchamia harmonogram, strona może, co jakiś czas ładować się wolniej, szczególnie gdy w harmonogramie znajduje się zadanie które wykonuje się długo. Właściciele blogów mało odwiedzanych mogą też spotkać się z problemem, gdy zaplanowane publikacje wpisów nie pojawią się w określonym terminie, ponieważ nikt nie odwiedzi strony. Na szczęście wad WordPressowego crona możemy się w prosty sposób pozbyć.

Optymalizacja Harmonogramu zadań WordPress

Mając dostęp do pliku wp-config.php oraz możliwość utworzenia zdania dla Cron na serwerze możemy zoptymalizować działanie harmonogramu na naszej stronie. Pierwszym krokiem będzie wyłączenie automatycznego uruchamiania harmonogramu za każdym razem, gdy nasza strona jest wywoływana. Aby to zrobić dodajemy poniższą linię kodu do pliku wp-config.php, który znajduje się w folderze głównym strony.

define('DISABLE_WP_CRON', true);

Zrzut ekranu formularza dodawania zadania w cPanel
Zrzut ekranu formularza dodawania zadania w cPanel

Następnym krokiem będzie utworzenie zadania w harmonogramie serwera. Na większości hostingów możemy to zrobić z poziomu cPanelu, udając się do zakładki „Zadania Cron”. W formularzu należy wybrać jak często ma być uruchamiany cron WordPressa i dodajemy następującą komendę:

wget http://twojadomena/wp-cron.php /dev/null 2>&1

Jak często zadanie ma być wykonywane zależy tylko i wyłącznie od was. Należy się przy tym kierować zdrowym rozsądkiem. Osobiście proponuję ustawić wykonywanie nie mniej niż raz na godzinę.

Jak dodać zadanie do harmonogramu WordPress?

Dodawanie nowych zadań jest bardzo proste. Na początku należy napisać funkcję, która ma się wykonywać i dodać ją jako akcję. Dla przykładu napisałem funkcję wysyłającą maila. Kod możemy umieścić w pliku functions.php naszego tematu lub kodzie wtyczki.

function moja_funkcja() {
wp_mail( 'adres@odbiorcy.pl', 'Temat maila', 'Treść maila');
}
add_action( 'moj_akcja', 'moja_funkcja' );

Drugi krok to dodanie akcji do harmonogramu.

if ( !wp_next_scheduled('moja_akcja') ) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'moja_akcja', 'argumety_akcji' ); // Podstawowe przedziały czasowe: hourly, daily and twicedaily
}

Usuwanie zadania

Często popełnianym błędem jest nieusuwanie zadań z harmonogramu. Np przy odinstalowywaniu wtyczki. Usunięcie zadania cron jest bardzo proste, wystarczy zastosować poniższy kod:

wp_clear_scheduled_hook( 'moja_akcja' );
delete_action( 'moj_akcja', 'moja_funkcja' );

Więcej opcji czasowych

WordPress ma standardowo trzy przedziały czasowe: hourly, daily and twicedaily czyli co godzinę, raz i dwa razy dziennie. Jeśli to nam nie wystarczy możemy dodać więcej opcji tworząc własny filtr.

function cron_time_intervals( $param ) {
return array( 'two_hours' => array(
'interval' => 7200, // sekundy
'display' => 'two_hours'
) );
}
add_filter( 'cron_schedules', 'cron_time_intervals' );

To wszystkie informacje związane z harmonogramem zadań WordPress. W razie problemów z tą funkcją można śmiało się ze mną kontaktować, chętnie pomogę.