Jak działa WordPress Cron

Opublikowany: 2021-12-03

Czy kiedykolwiek zastanawiałeś się, czym jest WP-Cron? Jeśli tak, to jest to idealny artykuł, aby dowiedzieć się wszystkiego, co musisz wiedzieć o zaplanowanych zadaniach WordPress.

Cron (Command Run On) to narzędzie uruchamiane w systemach UNIX, a później rozwinięte w dystrybucjach LINUX, które zostało zaproponowane jako harmonogram zadań oparty na czasie.

Zadanie cron to zadanie, które jest wykonywane powtarzalnie lub jako zadanie jednorazowe. Przez lata był używany głównie jako narzędzie do administrowania systemem do automatycznego uruchamiania zadań.

WordPress Cron

Podczas uruchamiania witryny WordPress niektóre zadania są wykonywane w tle, które muszą być wykonywane okresowo, takie jak sprawdzanie aktualizacji motywów i wtyczek, zaplanowanych postów, przejściówek do usunięcia i wielu innych. Te zaplanowane zadania oparte na czasie są obsługiwane przez WP-Cron.

W instalacji WordPress plik związany z zadaniami cron to plik wp-cron.php , znajdujący się w folderze głównym instalacji.

Plik wp-cron.php zawiera kod do zautomatyzowanych zadań związanych z aktualizacjami i postami.

Jak to działa

WP-Cron sprawdza listę zadań przy każdym załadowaniu strony i odpowiednio się wykonuje.

Jeśli w momencie wczytania strony zadanie jest należne, jest ono dodawane do kolejki. W ten sposób WordPress zapewnia, że ​​nawet odpowiednie zdarzenia zostaną uruchomione i nie zostaną pominięte, a ostatecznie wszystkie zadania zostaną wykonane przy tym załadowaniu strony.

To naturalne, jeśli wydaje ci się to irracjonalne, ale pomyśl o alternatywie. W środowisku hostingu współdzielonego, jak to ma miejsce w większości, powinieneś mieć dostęp do poleceń serwera, aby kontrolować te zadania według własnego uznania, ale czy nie byłoby to ryzykowne dla serwera?

Zastanów się więc, co robi WordPress jako obejście w tej sytuacji. Ma to jednak pewne wady, które przyjrzymy się za chwilę.

Wtyczka WP-Crontrol

Świetnym i łatwym sposobem przeglądania listy zadań cron w witrynie WordPress jest zainstalowanie wtyczki WP-Crontrol.

Po aktywacji możesz wyświetlić stronę administratora wtyczki w menu Narzędzia->Zdarzenia Cron. W instalacji waniliowej zobaczysz coś takiego:

Jeśli najedziesz kursorem myszy na każdy wiersz, zauważysz, że dostępne są akcje umożliwiające edycję lub uruchomienie dowolnego zdarzenia.

Na przykład na ekranie edycji zdarzenia wp_update_themes możesz zmienić jego ustawienia

W menu Ustawienia -> Harmonogramy Cron możesz wyświetlić domyślne harmonogramy, a jeśli chcesz, dodać własny i nadać mu nazwę, która będzie wyświetlana na liście.

Jak stworzyć zadanie Crona?

Aby ręcznie dodać zadanie cron, wystarczy edytować plik functions.php motywu. Aby zademonstrować prosty przykład, otwórz go w swoim ulubionym edytorze i dodaj następujący fragment kodu:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }

Gdzie 'my_cronjob' to nazwa twojego hooka, a 'my_cronjob_function' to nazwa twojej funkcji, która po prostu wyśle ​​e-mail na adres, który zdefiniowałeś, zastępując EMAIL_ADDRESS żądanym.

Następnie musimy zaplanować wykonanie tego podpięcia w wybranym przez nas czasie.

Jak uruchomić zadanie raz

Aby wykonać akcję jako jednorazowe zadanie WP-Cron, musimy użyć wbudowanej funkcji WordPress wp_schedule_single_event(), która ma na celu wyzwolenie podpięcia w określonym czasie. Jego struktura wygląda tak:

wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )

Gdzie $timestamp to uniksowy znacznik czasu określający, kiedy należy ponownie uruchomić zdarzenie, a $hook to przechwycenie akcji do wykonania po uruchomieniu zdarzenia.

Oba te parametry są wymagane. Porozmawiajmy teraz o parametrach opcjonalnych.

Za pomocą parametru $args możesz użyć tablicy zawierającej argumenty, aby przekazać do funkcji zwrotnej przechwytu. Każda wartość w tablicy jest przekazywana do wywołania zwrotnego jako indywidualny parametr. Klucze tablicy są ignorowane.

Parametr $wp_error może być użyty do zwrócenia WP_Error w przypadku niepowodzenia. Jego domyślna wartość to false.

Odpowiedni kod w naszym pliku functions.php wyglądałby tak:

 add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } wp_schedule_single_event( time() + 3600, 'my_cronjob' );

W tym momencie powinieneś być w stanie zobaczyć swoje niestandardowe zadanie na liście.

Jak uruchomić zadanie jako wydarzenie cykliczne

WordPress zapewnia w tym scenariuszu funkcję wp_schedule_event() o takiej strukturze

wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)

Parametr $timestamp jest wymaganym uniksowym znacznikiem czasu, kiedy należy ponownie uruchomić zdarzenie, $recurrence jest również ciągiem znaków określającym, jak często zdarzenie powinno się powtórzyć, a $hook to przechwycenie akcji do wykonania po uruchomieniu zdarzenia.

Opcjonalne parametry $args i $wp_error są takie same jak poprzednio.

Kod, który uruchamia zadanie z powtarzalnością, powiedzmy, 1 godziny, jest następujący:

 add_action('my_hourly_cronjob', 'hourly_action'); function hourly_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_hourly_cronjob' )) { wp_schedule_event(time(), 'hourly', 'my_hourly_cronjob'); }

Użyliśmy funkcji wp_next_scheduled() w instrukcji „if”, jak widać powyżej, aby uniknąć zduplikowanych zdarzeń i upewnić się, że zadanie nie jest już zaplanowane przed kontynuowaniem i uruchomieniem.

Użyliśmy również etykiety „godzinowa” z zaplanowanej tabeli w Ustawienia -> Harmonogramy Cron. Jeśli chcielibyśmy, aby wystąpiło inne zdarzenie, powiedzmy co 45 minut, powinniśmy najpierw utworzyć niestandardowy harmonogram Cron o nazwie „45_minutes”, a następnie użyć go w kodzie.

 add_action('my_45_cronjob', 'my_45_action'); function my_45_action() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); } if (! wp_next_scheduled ( 'my_45_cronjob' )) { wp_schedule_event(time(), '45_minutes', 'my_45_cronjob'); }

W tym momencie powinieneś być w stanie zobaczyć swoje niestandardowe zadanie na liście z oczekiwanymi zmianami:

WP-Cron Wady

Sposób, w jaki WordPress obsługuje zadania cron, zapewnia, że ​​zadanie zostanie uruchomione, ale nie pozwala określić, kiedy, ponieważ, jak powiedzieliśmy, sprawdzanie odbywa się, gdy odwiedzający załaduje stronę Twojej witryny.

Jeśli przekażemy kontrolę zadań crona na czas odwiedzin użytkowników, to możliwe, że będziemy mieć negatywny wpływ na stronę bez względu na jej wielkość lub popularność.

Hostuj swoją stronę internetową z Pressidium

60- DNIOWA GWARANCJA ZWROTU PIENIĘDZY

ZOBACZ NASZE PLANY

W przypadku popularnej strony internetowej odczujesz duży ruch ze względu na jednoczesną realizację dużej liczby zadań. Może to spowodować zużycie zasobów Twojego serwera i wpłynąć na wydajność, a nawet spowodować przestój Twojej witryny.

W przypadku małej witryny, co oznacza niewielką liczbę odwiedzających, wp-cron nie będzie uruchamiany tak często, dlatego niektóre ważne zadania crona mogą zostać odłożone na wystarczająco długi czas, aby wywołać skutki uboczne, takie jak brak wystarczającej liczby kopii zapasowych lub opóźnienie aktualizacji niektórych dane, które są liczone w zadaniu crona.

Wyłącz WP-Cron

Jeśli sposób, w jaki WP-Cron obsługuje zadania cron, nie spełnia twoich wymagań i potrzebujesz zadań wykonywanych na czas, powinieneś wyłączyć WP-Cron i użyć usługi cron po stronie serwera.

Jeśli wyłączenie WP-Cron nie jest opcją już dostarczoną przez dostawcę usług hostingowych, oto jak możesz to zrobić samodzielnie.

Otwórz plik wp-config.php , znajdujący się w głównym folderze instalacji, w swoim ulubionym edytorze i znajdź wiersze związane z prefiksem tabeli bazy danych. Zaraz potem wstaw ten wiersz:

 // /** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each * a unique prefix. Only numbers, letters, and underscores please! */ $table_prefix = 'wN0b9WQk_'; define('DISABLE_WP_CRON', 'true');

Jest to obowiązkowe, jeśli chcesz skorzystać z bardziej stabilnego harmonogramu, takiego jak usługa cron w systemie Linux, aby wyzwolić wp-cron.php w dowolnym momencie.

Rozwiązanie po stronie serwera: usługa Linux Cron

W Pressidium używamy Linux Crontab do uruchamiania WP-Cron co 5 minut. Jest to odpowiedni czas, który zapewnia terminową realizację zaplanowanych zadań, a jednocześnie pozwala uniknąć przeciążenia witryny WordPress. Nie koliduje to z harmonogramem WP-Cron, a jedynie z mechanizmem wyzwalającym.

Wniosek

Mam nadzieję, że ten artykuł pomógł ci zapoznać się z WordPress Cron, czym jest i jak działa oraz jak tworzyć własne harmonogramy i zadania. Zastanów się dwa razy, czy WP-Cron wystarczy do Twoich wymagań, zanim wybierzesz inne rozwiązania po stronie serwera.