wp_schedule_event în interiorul unei clase

Până acum nu am avut nevoie de cron jobs în WP. Dar cum vreau să fac un request zilnic pentru un update, nu prea am altă soluție decât wp_scedule_event sau un cron job. Având în vedere că toată treaba asta va fi într-un plugin public, nu pot să presupun că toți utilizatorii au posibilitatea de a seta un cronjob.

Cum tot codul meu este în interiorul unei clase, am presupus că merge ca la orice alt callback din WordPress:

wp_schedule_event( time(), 'daily', array( $this, 'cronjob' ) );

Doar că apar două probleme:

  1. wp_unschedule_event acceptă ca hook un string
  2. wp_schedule_event acceptă pentru callback tot un string!

Așa că pentru a seta un amărât de cron va trebui să folosiți două funcții ce fac treaba, nu o clasă.

Greșești un pic. Tu programezi un hook, un event, de aia e string. Mai departe trebuie să adaugi o acțiune cu callback. În interiorul constructorului o să ai ceva de genul:

if ( ! wp_next_scheduled( 'iamntz120714_event' ) ) {
  wp_schedule_event( time(), 'daily', 'iamntz120714_event' );
}
add_action( 'iamntz120714_event', array( $this, 'cronjob' ) );
3 Likes

Din ciclul „degeaba RTFM dacă ești chior” :blush:

Da, are sens ce zici tu și acum văd că scrie același lucru în Codex. Da, pe aceeași pagină din Codex pe care am citit-o și răs-citit-o.

Partea cea mai amuzantă este că am văzut ceva asemănător cu exemplul tău pe Stack Overflow (dar spunea respectivul că nu-i merge) și m-am gândit: „pff, ce prost… nu are un callback valid, LOGIC că nu merge!” :dash: