Cum funcționează WordPress Cron
Publicat: 2021-12-03Te-ai întrebat vreodată ce este WP-Cron? Dacă da, atunci acesta este articolul perfect pentru a afla tot ce trebuie să știți despre sarcinile programate WordPress.
Cron (Command Run On) este un utilitar început în sistemele UNIX și a evoluat ulterior pe distribuțiile LINUX care a fost propus ca un planificator de joburi bazat pe timp.
Un job cron este o sarcină care este efectuată în mod repetitiv sau ca sarcină unică. De-a lungul anilor, a fost folosit în mare parte ca instrument de administrare a sistemului pentru rularea automată a sarcinilor.
WordPress Cron
În timpul rulării unui site web WordPress, unele sarcini sunt efectuate în fundal care trebuie executate periodic, cum ar fi verificarea actualizărilor temelor și pluginurilor, postărilor programate, temporare care trebuie șterse și multe altele. Aceste sarcini programate bazate pe timp sunt gestionate de WP-Cron.
În instalarea dvs. WordPress, fișierul legat de joburile cron este fișierul wp-cron.php
, aflat în folderul rădăcină al instalării dvs.
Fișierul wp-cron.php conține codul pentru sarcinile automate legate de actualizări și postări.
Cum functioneaza
WP-Cron verifică lista de sarcini la fiecare încărcare a paginii și se execută în consecință.
Dacă în momentul în care pagina este încărcată, o sarcină este scadentă, aceasta este adăugată într-o coadă. În acest fel, WordPress se asigură că chiar și evenimentele datorate vor fi declanșate și nu vor fi sărite și, în cele din urmă, toate sarcinile vor fi executate pe acea încărcare a paginii.
Este firesc dacă acest lucru vi se pare irațional, dar gândiți-vă la alternativă. Într-un mediu de găzduire partajată, așa cum este în majoritatea lor, ar trebui să aveți acces la comenzile serverului pentru a controla aceste sarcini după cum credeți de cuviință, dar nu ar fi acest lucru riscant pentru server?
Deci, luați în considerare ce face WordPress ca o soluție de soluție în această situație. Cu toate acestea, acest lucru are câteva dezavantaje pe care le vom examina în curând.
Pluginul WP-Crontrol
O modalitate excelentă și ușoară de a vizualiza lista de joburi cron de pe site-ul dvs. WordPress este să instalați pluginul WP-Crontrol.
După activare, puteți vizualiza pagina de administrare a pluginului sub elementul de meniu Instrumente->Evenimente Cron. Într-o instalare de vanilie, veți vedea ceva de genul acesta:
Dacă treceți cu mouse-ul peste fiecare rând, veți observa că sunt furnizate acțiuni pentru a edita sau a rula oricare dintre evenimente.
În ecranul de editare al evenimentului wp_update_themes, de exemplu, puteți modifica setările acestuia
Sub elementul de meniu Setări -> Cron Schedules, puteți vizualiza programările implicite și, dacă doriți, adăugați unul de-al dvs. și dați-i un nume pentru a fi vizualizat în listă.
Cum se creează un job Cron
Pentru a adăuga manual un job cron, tot ce trebuie să faceți este să editați fișierul functions.php
al temei. Pentru a demonstra un exemplu simplu, deschideți-l cu editorul preferat și adăugați următorul cod:
add_action( 'my_cronjob', 'my_cronjob_function' ); function my_cronjob_function() { wp_mail( 'EMAIL_ADDRESS', 'Test email', 'This is a test message' ); }
Unde „my_cronjob” este numele cârligului dvs. și „my_cronjob_function” este numele funcției dvs., care va trimite pur și simplu un e-mail la adresa pe care ați definit-o prin înlocuirea EMAIL_ADDRESS cu cea dorită.
În continuare, trebuie să programăm acest hook pentru a fi executat în timpul dorit.
Cum să rulați jobul o dată
Pentru a efectua acțiunea ca un job WP-Cron unic, trebuie să folosim funcția încorporată WordPress wp_schedule_single_event() care este proiectată să declanșeze un hook la un moment specificat. Structura sa este astfel:
wp_schedule_single_event( $timestamp, $hook, $args, $wp_error )
Unde $timestamp este marcajul de timp Unix pentru următoarea rulare a evenimentului și $hook este hook-ul de acțiune care trebuie executat atunci când evenimentul este rulat.
Acești doi parametri sunt necesari. Acum să vorbim despre parametrii opționali.
Cu parametrul $args puteți folosi o matrice care conține argumente, pentru a trece la funcția de apel invers a hook-ului. Fiecare valoare din matrice este transmisă callback-ului ca parametru individual. Cheile matricei sunt ignorate.
Parametrul $wp_error poate fi folosit pentru a returna un WP_Error la eșec. Valoarea sa implicită este false.
Codul corespunzător din fișierul nostru functions.php
ar fi astfel:
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' );
În acest moment, ar trebui să puteți vedea sarcina personalizată în listă.
Cum să rulați jobul ca eveniment recurent
Ceea ce oferă WordPress pentru acest scenariu este funcția wp_schedule_event() care este structurată astfel
wp_schedule_event( $timestamp, $recurrence, $hook, $args, $wp_error)
Parametrul $timestamp este marcajul de timp Unix necesar pentru următoarea rulare a evenimentului, $recurrence este un șir necesar și pentru cât de des evenimentul ar trebui să se repete ulterior și $hook este hook-ul de acțiune care trebuie executat atunci când evenimentul este rulat.
Parametrii opționali $args și $wp_error sunt aceiași ca înainte.
Codul care rulează jobul cu o recurență de, să spunem, 1 oră este următorul:
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'); }
Am folosit funcția wp_next_scheduled() într-o instrucțiune „dacă”, așa cum vedeți mai sus, pentru a evita evenimentele duplicate și pentru a ne asigura că sarcina nu este deja programată înainte de a continua și de a o rula.
De asemenea, am folosit eticheta „orară” din tabelul programat din Setări -> Programări Cron. Dacă dorim o apariție diferită, să spunem la fiecare 45 de minute, ar trebui mai întâi să creăm un program Cron personalizat numit „45_minutes” și apoi să îl folosim în cod.
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'); }
În acest moment, ar trebui să puteți vedea sarcina personalizată în listă cu modificările așteptate:
Dezavantaje WP-Cron
Modul în care WordPress gestionează joburile cron asigură că sarcina va rula, dar nu vă permite să specificați când, deoarece, așa cum am spus, verificarea se face atunci când un vizitator încarcă o pagină a site-ului dvs.
Dacă transmitem controlul cron jobs asupra timpului de vizită al utilizatorilor, atunci este posibil să avem un impact negativ asupra site-ului web, indiferent de dimensiunea acestuia sau de cât de popular este.
În cazul unui site web popular, veți experimenta o cantitate mare de trafic datorită executării simultane a unui număr mare de sarcini. Acest lucru poate consuma resursele serverului dvs. și poate afecta performanța sau chiar poate cauza opriri ale site-ului dvs.
În cazul unui site web mic, ceea ce înseamnă puțini vizitatori, wp-cron-ul nu va fi declanșat atât de des, prin urmare, unele lucrări cron importante pot fi amânate suficient de timp pentru a crea efecte secundare, cum ar fi lipsa unor copii de rezervă suficiente sau întârzierea actualizării unora. date care se numără pe un job cron.
Dezactivează WP-Cron
Dacă modul în care WP-Cron gestionează joburile cron nu corespunde cerințelor dvs. și aveți nevoie de sarcinile executate la timp, atunci ar trebui să dezactivați WP-Cron și să utilizați un serviciu cron pe partea de server.
Dacă dezactivarea WP-Cron nu este o opțiune deja oferită de furnizorul dvs. de găzduire, iată cum o puteți face singur.
Deschideți fișierul wp-config.php
, aflat sub folderul rădăcină al instalării dvs., cu editorul preferat și găsiți liniile legate de prefixul tabelului bazei de date. Imediat după, introduceți această linie:
// /** * 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');
Acest lucru este obligatoriu dacă doriți să utilizați un planificator mai stabil, cum ar fi serviciul Linux cron, pentru a declanșa wp-cron.php oricând vi se potrivește mai bine.
O soluție pe partea serverului: Serviciul Linux Cron
La Pressidium, folosim Linux Crontab pentru a declanșa WP-Cron la fiecare 5 minute. Este timpul potrivit care asigură că lucrările dvs. programate sunt executate la timp și, în același timp, evită supraîncărcarea site-ului dvs. WordPress. Acest lucru nu interferează cu planificatorul WP-Cron, ci doar cu mecanismul de declanșare.
Concluzie
Sperăm că acest articol v-a ajutat să vă familiarizați cu WordPress Cron, ce este și cum funcționează și cum să vă creați propriile programe și sarcini. Gândiți-vă de două ori dacă WP-Cron este suficient pentru cerințele dvs., înainte de a alege alte soluții pe partea de server.