Cum să folosești add_action cu wp_cron în WordPress?
Doresc să execut niște cod de fiecare dată când wp_cron rulează în WordPress, indiferent de intervalul de timp. Este posibil să creez un add_action pentru acest lucru? Am căutat în lista de filtre dar nu am găsit nimic relevant.
Mulțumesc!

Practic, la fiecare încărcare de pagină se verifică dacă există ceva programat să ruleze, deci după această logică cron este verificat și poate rula la fiecare încărcare de pagină.
Presupun că vrei să programezi ceva să ruleze periodic. Dacă da, trebuie să te uiți la wp_schedule_event()
Mai jos este codul pentru a rula un cod la fiecare oră:
add_action('my_hourly_event', 'do_this_hourly');
// Acțiunea se va declanșa când cineva vizitează site-ul tău WordPress
function my_activation() {
if ( !wp_next_scheduled( 'my_hourly_event' ) ) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'my_hourly_event');
}
}
add_action('wp', 'my_activation');
function do_this_hourly() {
// faci ceva la fiecare oră
}
Dacă vrei să declanșezi propriul tău cod când cron-ul altcuiva rulează, atunci trebuie să te conectezi la acțiunea lor care este declanșată. Să presupunem că codul de mai sus este al altui plugin și vrei să rulezi codul tău de fiecare dată când al lor rulează.
Ei au creat o acțiune astfel:
add_action('my_hourly_event', 'do_this_hourly');
deci tot ce trebuie să faci este să îți atașezi funcția la aceasta:
add_action('my_hourly_event', 'my_flush_function');
function my_flush_function() {
// Rulează codul tău aici
}

Mulțumesc pentru răspuns, dar vreau să mă conectez specific la evenimentele cron existente, declanșându-se o dată ce cron-ul a fost executat. Ceea ce doresc să fac este să golesc cache-ul meu W3 Total Cache (flush_pgcache()) de fiecare dată când un cron rulează.

Ah, mulțumesc! Pentru a fi mai clar, am postări programate în viitor și vreau ca cache-ul să se curețe când acestea sunt publicate prin declanșatorul wp-cron. Există poate o modalitate mai bună?

După această observație a OP-ului:
Pentru a fi mai clar, am postări programate în viitor și doresc ca cache-ul să se șteargă atunci când acestea sunt publicate prin intermediul trigger-ului wp-cron. Există o modalitate mai bună?
Nu știu dacă modulul W3 Total Cache nu șterge automat cache-ul când postările sunt publicate. Credeam că o face. Dacă nu - atunci în acest caz aș folosi hook-ul pentru tranziția postărilor (vezi întrebarea conexă) și aș șterge cache-ul atunci. În acest fel, ori de câte ori o postare își schimbă statusul (prin wp-cron sau altfel) - cache-ul este actualizat pentru a reflecta această schimbare.
//Rulează ori de câte ori o postare își schimbă statusul
add_action('transition_post_status','wpse49927_transition_post_status',10,3);
function wpse49927_transition_post_status($new_status,$old_status,$post){
//Șterge cache-ul
flush_pgcache();
}
Problema inițială
Ca răspuns la întrebarea inițială: executarea unei funcții ori de câte ori wp-cron este lansat - nu cred că acest lucru este posibil programatic - iar soluția oferită de @Brady este probabil cea mai apropiată de a realiza acest lucru.

Am avut recent nevoie să fac același lucru cu w3 total cache, iată cum am implementat (simplificat pentru a răspunde la întrebarea inițială)
<?php
/**
* fac_all_crons vă permite să atașați o funcție la toate wp-cron-urile înregistrate într-un site WordPress
* @author Russell Fair
* @uses wp_get_schedules pentru a obține o listă de cron-uri înregistrate
*/
function fac_all_crons(){
$schedules = wp_get_schedules();
if ( !$schedules )
return;
foreach ( $schedules as $key ){
if ( ! wp_next_scheduled( 'fac_cache_clear' ) ) {
wp_schedule_event( time(), $key, 'fac_cache_clear' );
}
}
}
add_filter('init', 'fac_all_crons');
/**
* fac_cache_clear face efectiv ștergerea cache-ului
* @author Russell Fair
*/
function fac_cache_clear(){
//aici faceți ștergerea cache-ului
}

Pentru a goli cache-ul paginii doar atunci când un articol programat își schimbă starea în publicat, este recomandat să folosiți hook-ul 'publish_future_post'. Adăugați fragmentul de cod în fișierul functions.php.
Nu utilizați hook-ul 'transition_post_status' care este executat și el. Testele mele au arătat că uneori clasa necesară 'W3_PgCacheFlush' din plugin-ul W3TC nu poate fi instanțiată folosind acest hook.
/**
* Această funcție golește complet cache-ul W3TC când un articol programat este publicat.
* notă 11.09.12
*/
add_action('publish_future_post', 'wpse_49927_clear_w3tc_cache_on_future_to_publish');
function wpse_49927_clear_w3tc_cache_on_future_to_publish( $post_id) {
if (function_exists('w3_instance') && class_exists('W3_PgCacheFlush')) {
$w3_pgcache = & w3_instance('W3_PgCacheFlush');
if (is_object($w3_pgcache) && method_exists($w3_pgcache, 'flush')) {
$w3_pgcache->flush();
}
}
}

Pentru cineva care ajunge aici, există o modalitate de a executa un cod de fiecare dată când este apelat URL-ul cron și acest lucru poate fi realizat simplu cu următorul cod:
add_action( 'init', 'my_function_on_each_cron_call' );
function my_function_on_each_cron_call() {
if ( isset( $_GET[ 'doing_wp_cron' ] ) && $_SERVER['REQUEST_URI'] == '/wp-cron.php?doing_wp_cron' ) {
// CODUL TĂU AICI
}
}
Unde $_SERVER['REQUEST_URI'] probabil poate fi omis, dar nu este periculos.
