Przejdź do treści

Zamiennik WP-Cron

Queuety może zastąpić wbudowany system WordPress cron. Po włączeniu wywołania wp_schedule_event() są przechwytywane i kierowane przez harmonogram Queuety zamiast domyślnego mechanizmu WP-Cron. Zdarzenia są przeznaczone do przetwarzania przez proces roboczy Queuety, który wykonuje zadania niezależnie od ruchu w witrynie.

Obecne ograniczenie: most tworzy harmonogramy Queuety, ale proces roboczy nie ma programu obsługi zadań __queuety_cron_{hook}, które one tworzą, więc pierwotne wywołania zwrotne WordPress nigdy nie są uruchamiane. Każde zadanie kończy się niepowodzeniem, jest ponawiane po czasie oczekiwania i ostatecznie trafia do archiwum (#9). Nie włączaj mostu w witrynie, w której zdarzenia cron muszą być wykonywane, dopóki problem nie zostanie naprawiony.

Włączanie zamiennika

Wywołaj Queuety::replace_wp_cron() na wczesnym etapie inicjalizacji wtyczki lub motywu:

PHP
use Queuety\Queuety;

Queuety::replace_wp_cron();

Zwykle wywołuje się to w głównym pliku wtyczki lub w punkcie zaczepienia plugins_loaded. Wywołanie musi nastąpić po załadowaniu WordPress (wtyczka musi być aktywna).

Co jest przechwytywane

Most cron podłącza się do trzech filtrów WordPress:

Funkcja WordPress Podłączony filtr Działanie
wp_schedule_event() pre_schedule_event Tworzy harmonogram Queuety o tym samym interwale
wp_unschedule_event() pre_unschedule_event Usuwa odpowiadający mu harmonogram Queuety
wp_get_scheduled_event() pre_get_scheduled_event Zwraca dane harmonogramu z Queuety

Przechwytywane są tylko zdarzenia cykliczne (te z właściwością schedule, taką jak hourly, twicedaily, daily). Zdarzenia jednorazowe zaplanowane za pomocą wp_schedule_single_event() nie są przechwytywane.

Mapowanie zdarzeń

Gdy wtyczka wywołuje wp_schedule_event(), Queuety rozpoznaje nazwę harmonogramu za pomocą wp_get_schedules(), tworzy harmonogram Queuety z nazwą programu obsługi __queuety_cron_{hook} i zapisuje pierwotną nazwę punktu zaczepienia WordPress oraz argumenty w ładunku harmonogramu.

Zgodnie z zamierzeniem proces roboczy Queuety przetwarzający zaplanowane zadanie wywołuje do_action() z pierwotną nazwą punktu zaczepienia i argumentami, dzięki czemu istniejące wywołania zwrotne WordPress są wykonywane, a czasem steruje Queuety. CronBridge::process_cron_event() implementuje to wywołanie, ale nic go jeszcze nie uruchamia (zob. powyższe ograniczenie). Harmonogramy są też oceniane tylko przez długotrwale działający proces wp queuety work, mniej więcej raz na minutę (zob. sekcję Planowanie).

Ustalanie interwałów

Most najpierw rozpoznaje nazwy harmonogramów za pomocą wp_get_schedules(), a następnie korzysta z wbudowanych wartości domyślnych:

Nazwa harmonogramu Interwał
hourly 3,600 sekund
twicedaily 43,200 sekund
daily 86,400 sekund
weekly 604,800 sekund

Obsługiwane są niestandardowe interwały harmonogramu zarejestrowane za pomocą filtra cron_schedules, o ile zwraca je wp_get_schedules().

Przywracanie WP-Cron

Aby wrócić do domyślnego systemu WordPress cron:

PHP
Queuety::restore_wp_cron();

Usuwa to zaczepy filtrów i pozwala ponownie obsługiwać zdarzenia cron za pomocą wbudowanego mechanizmu WordPress. Pamiętaj, że podczas instalacji mostu DISABLE_WP_CRON jest definiowana jako true i nie można jej oddefiniować w czasie działania, więc może być konieczne usunięcie tej stałej z wp-config.php lub ponowne uruchomienie procesu.

Kiedy używać

Zamiennik jest najbardziej przydatny, gdy witryna ma mały ruch, gdy potrzebujesz bardziej niezawodnego harmonogramu niż ten zapewniany przez WP-Cron albo gdy już uruchamiasz procesy robocze Queuety i chcesz, by wykonywanie cron odbywało się w tym samym systemie operacyjnym. Przydaje się też, gdy ważna jest scentralizowana obserwowalność, ponieważ zdarzenia cron pojawiają się wtedy w tych samych dziennikach i metrykach co pozostałe zadania kolejki.

Ograniczenia

Obowiązuje kilka ważnych ograniczeń. Do działania zaplanowanych zdarzeń wymagany jest aktywny proces roboczy Queuety. Przechwytywane są tylko harmonogramy cykliczne; zdarzenia jednorazowe utworzone za pomocą wp_schedule_single_event() nadal nie są obsługiwane przez most. replace_wp_cron() definiuje też DISABLE_WP_CRON na czas działania bieżącego procesu PHP, więc restore_wp_cron() usuwa zaczepy, ale nie może oddefiniować stałej. Most działa tylko wtedy, gdy załadowano WordPress, ponieważ zależy od filtrów WordPress i do_action().

Przykład: pełna konfiguracja

PHP
use Queuety\Queuety;

// In your plugin's main file.
add_action( 'plugins_loaded', function () {
    Queuety::replace_wp_cron();
} );

Nie trzeba tu wywoływać Queuety::init(): aktywna wtyczka Queuety tworzy połączenie na podstawie danych dostępowych bazy danych WordPress i inicjalizuje się podczas plugins_loaded. replace_wp_cron() instaluje tylko filtry, więc nie zależy od wcześniejszego wykonania tych czynności.

Następnie cykliczne zdarzenia rejestrowane przez wtyczki za pomocą wp_schedule_event() są zapisywane jako harmonogramy Queuety. Do czasu naprawienia #9 ich wywołania zwrotne nie będą wykonywane.