add_action per wp cron?
Vorrei eseguire del codice ogni volta che il cron di WordPress viene eseguito, indipendentemente dall'intervallo di tempo. È possibile creare un add_action per questo? Ho cercato nella lista dei filtri ma non ho trovato nulla di rilevante.
Grazie!

Fondamentalmente, ad ogni caricamento di pagina viene verificato se ci sono operazioni programmate da eseguire, quindi per questa logica il cron viene controllato e può potenzialmente essere eseguito ad ogni caricamento di pagina.
Presumo che tu voglia programmare qualcosa da eseguire periodicamente. Se è questo il caso, devi considerare la funzione wp_schedule_event().
Di seguito è riportato il codice per eseguire un'azione ogni ora:
add_action('my_hourly_event', 'do_this_hourly');
// L'azione verrà attivata quando qualcuno visita il tuo sito 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() {
// esegui qualcosa ogni ora
}
Se vuoi attivare il tuo codice quando il cron di qualcun altro viene eseguito, allora devi collegarti alla loro azione che viene attivata. Supponiamo che il codice sopra sia di un plugin di qualcun altro e tu voglia eseguire il tuo codice ogni volta che il loro viene eseguito.
Hanno creato un'azione come questa:
add_action('my_hourly_event', 'do_this_hourly');
quindi tutto ciò che devi fare è agganciare la tua funzione a questa azione:
add_action('my_hourly_event', 'my_flush_function');
function my_flush_function() {
// Inserisci qui il tuo codice
}

Grazie per la risposta, ma voglio che si agganci specificamente agli eventi cron esistenti, attivandosi una volta che il cron è stato eseguito. Quello che voglio fare è pulire la mia cache W3 Total Cache (flush_pgcache()) ogni volta che un cron viene eseguito.

Ah grazie! Per essere più chiaro, ho post programmati nel futuro e voglio che la cache venga pulita quando vengono pubblicati tramite il trigger wp-cron. Forse c'è un modo migliore?

Dopo questa osservazione dell'OP:
Per essere più chiaro, ho post programmati nel futuro e voglio che la cache venga svuotata quando vengono pubblicati tramite il trigger wp-cron. Potrebbe esserci un modo migliore?
Non so se il plugin W3 Total Cache non svuoti automaticamente la cache quando i post vengono pubblicati. Credevo lo facesse. Se non lo fa - allora in questo caso aggancerei l'hook di transizione del post (vedi domanda correlata) e svuoterei la cache in quel momento. In questo modo, ogni volta che un post cambia stato (tramite wp-cron o altro) - la cache viene aggiornata per riflettere questo cambiamento.
//Eseguito ogni volta che un post cambia stato
add_action('transition_post_status','wpse49927_transition_post_status',10,3);
function wpse49927_transition_post_status($new_status,$old_status,$post){
//Svuota la cache
flush_pgcache();
}
Problema Originale
In risposta alla domanda originale: eseguire una funzione ogni volta che wp-cron viene lanciato - non penso sia possibile farlo a livello di codice - e la soluzione fornita da @Brady è probabilmente la più vicina che si possa ottenere per fare questo.

Recentemente ho dovuto fare la stessa cosa con w3 total cache, ecco come l'ho implementato (semplificato per rispondere alla domanda dell'OP)
<?php
/**
* fac_all_crons ti permette di collegare una funzione a tutti i wp-cron registrati in un sito WordPress
* @author Russell Fair
* @uses wp_get_schedules per ottenere una lista dei cron registrati
*/
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 esegue effettivamente la pulizia della cache
* @author Russell Fair
*/
function fac_cache_clear(){
//fai qui la pulizia della cache
}

Per cancellare la cache della pagina solo quando un post programmato cambia effettivamente il suo stato in "pubblicato", si consiglia di utilizzare l'hook 'publish_future_post'. Aggiungi questo snippet di codice al tuo file functions.php.
Non utilizzare l'hook 'transition_post_status' che viene eseguito comunque. Il mio debug ha mostrato che a volte la classe necessaria 'W3_PgCacheFlush' del plugin W3TC non può essere istanziata utilizzando questo hook.
/**
* Questa funzione cancella completamente la cache di W3TC quando un post programmato viene pubblicato.
* jot 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();
}
}
}

Per chi arriva qui, esiste un modo per eseguire del codice ogni volta che viene chiamato l'URL del cron e può essere fatto semplicemente con il seguente codice:
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' ) {
// IL TUO CODICE VA QUI
}
}
Dove $_SERVER['REQUEST_URI'] probabilmente può essere omesso ma non è pericoloso.
