Cum să testezi wp_cron?

11 apr. 2011, 00:27:26
Vizualizări: 23K
Voturi: 29

Aceasta este un fel de întrebare stupidă...

Am programat o acțiune să ruleze la fiecare oră:

if(!wp_next_scheduled('my_hourly_events'))
  wp_schedule_event(time(), 'hourly', 'my_hourly_events');

add_action('my_hourly_events', 'the_function_to_run');

function the_function_to_run(){
   echo 'funcționează!'; 
}

Cum pot testa dacă funcționează fără să aștept o oră? :)

Am încercat să adaug wp_clear_scheduled_hook('my_hourly_events'); înainte de acest cod și să adaug wp_cron() după, dar nu văd funcția mea rulând...

editare:

ok, am adăugat un trigger_error() în interiorul funcției mele, am verificat log-ul de erori Apache, și este acolo :)

Acum sunt și mai confuz:

  • Cum poate wp-cron să ruleze în fundal? pentru că aparent asta se întâmplă dacă nu văd niciun output...

  • acest lucru nu pare să funcționeze într-un context de obiect; de ce?

3
Comentarii

ok am aflat că wp-cron.php este executat cu wp_remote_post(). asta explică totul...

onetrickpony onetrickpony
11 apr. 2011 02:33:18

Prin "context de obiect", te referi că callback-ul tău arată ca array( &$this, 'my_method_name' )? Asta într-adevăr nu va funcționa pentru că numele funcției este stocat în baza de date pentru a fi executat mai târziu. &$this se referă la un obiect specific, nu la un nume de clasă, iar acest obiect nu va exista la următoarea solicitare când job-ul cron este executat. O funcție statică a clasei ar trebui să funcționeze.

Jan Fabry Jan Fabry
11 apr. 2011 12:34:30

da, a trebuit să fac funcția mea statică. Nu mi-am dat seama că wp va rula la distanță un script local ca "cron"

onetrickpony onetrickpony
11 apr. 2011 20:05:12
Toate răspunsurile la întrebare 2
2
22

Pluginul meu preferat pentru asta este Core Control, care are un modul foarte bun pentru afișarea a ceea ce se întâmplă în cron - ce evenimente sunt configurate, când vor fi declanșate următoarele, etc.

Pentru a intra în detalii tehnice, vezi _get_cron_array(), care returnează datele interne stocate pentru evenimentele cron (cheile de nivel superior sunt timestamp-uri).

11 apr. 2011 08:37:26
Comentarii

înregistrează HTTP Access Logger toate cererile sau doar cele făcute cu API-ul HTTP al WP? Este minunat pentru a identifica cererile pe care le fac plugin-urile și de ce se încarcă pagina ta lent :)

onetrickpony onetrickpony
11 apr. 2011 20:12:30

@One Trick Pony nu sunt sigur, dar ar fi logic să presupunem că doar API

Rarst Rarst
11 apr. 2011 20:27:14
0

wp-cli este o altă metodă:

Listarea Evenimentelor

> wp cron event list
+-------------------+---------------------+-----------------------+---------------+
| hook              | next_run_gmt        | next_run_relative     | recurrence    |
+-------------------+---------------------+-----------------------+---------------+
| wp_update_plugins | 2020-04-14 08:11:38 | 7 ore 24 minute       | 12 ore        |
| wp_update_themes  | 2020-04-14 08:11:38 | 7 ore 24 minute       | 12 ore        |
| wcsc_prime_sites  | 2020-04-14 17:00:55 | 16 ore 13 minute      | 1 zi          |
+-------------------+---------------------+-----------------------+---------------+

Programarea unui Eveniment

> wp cron event schedule wp_update_plugins "now +5 seconds"
Succes: Eveniment programat cu hook-ul 'wp_update_plugins' pentru 2020-04-14 00:43:54 GMT.

Apoi puteți vizita partea frontală a site-ului și să reîmprospătați de câteva ori pentru a vă asigura că a fost declanșat. Apoi rulați din nou comanda list pentru a verifica că nu mai este programat.

Rulare Directă în Terminal

> wp cron event run wcsc_prime_sites
Evenimentul cron 'wcsc_prime_sites' a fost executat în 0.805s.
Succes: A fost executat un total de 1 eveniment cron.

Un aspect de reținut este că wp-cli rulează în contextul wp-admin, dar WP Cron rulează pe partea frontală. De obicei, aceasta nu este o problemă, dar când scrieți joburi, asigurați-vă că require() orice fișier din wp-admin/includes pe care codul dvs. se așteaptă să fie încărcat.

Dacă nu faceți acest lucru, jobul va funcționa corect în wp-cli, dar va produce o eroare fatală atunci când rulează în mod normal.

Alte Comenzi

Rulați wp help cron pentru mai multe detalii.

14 apr. 2020 03:59:10