add_action to wp cron?

Gostaria de executar algum código toda vez que o wordpress cron é executado, independentemente do período de tempo. É possível criar um add_action para isso? Olhei na lista de filtros, mas não consegui encontrar nada relevante.

Obrigado!

Solutions Collecting From Web of "add_action to wp cron?"

Basicamente, cada carga de página procura ver se há algo agendado para ser executado, então por essa lógica o cron é verificado e pode ser executado em cada carga de página.

Eu só posso presumir que você deseja agendar algo para ser executado de vez em quando. Se for esse o caso, você precisa olhar para wp_schedule_event ()

Abaixo está o código para obter algum código para executar todas as horas:

add_action('my_hourly_event', 'do_this_hourly'); // The action will trigger when someone visits your WordPress site 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() { // do something every hour } 

Se você quiser triggersr seu próprio código quando o cron de outra pessoa tiver executado, você precisa amarrar sua ação que é demitida. Então, vamos pegar o código acima é o plugin de outra pessoa e você deseja triggersr seu código toda vez que o seu é executado.

Bem, eles criaram uma ação como esta:

add_action('my_hourly_event', 'do_this_hourly');

então tudo o que você precisa fazer é filmar sua function para isso:

 add_action('my_hourly_event', 'my_flush_function'); function my_flush_function() { // Do your code here } 

Após esta observação do OP:

Para ser mais claro, eu agendado mensagens no futuro, e eu quero o cache para limpar quando são publicados através do gatilho wp-cron. Pode haver uma maneira melhor?

Não sei se o plug-in W3 Total Cache não esvazia automaticamente o cache quando as publicações são publicadas. Eu acreditei que sim. Se não o fizer, então, nesse inturante, eu engrossaria o gancho pós-transição ( veja a questão relacionada ) e elimine o cache então. Desta forma, sempre que uma mensagem muda de status (via wp-cron ou não) – o cache é atualizado para refletir isso.

  //Runs whenever a post changes status add_action('transition_post_status','wpse49927_transition_post_status',10,3); function wpse49927_transition_post_status($new_status,$old_status,$post){ //Flush cache flush_pgcache(); } 

Problema original

Em resposta à pergunta original: triggersndo uma function sempre que o wp-cron é lançado – eu não acho que isso é possível programaticamente – e a solução dada por @Brady provavelmente é a mais próxima que você conseguirá fazer isso.

Eu recentemente tive que fazer o mesmo com o cache total do w3, aqui é como eu o implementei (simplificado para responder a pergunta OP)

 < ?php /** * fac_all_crons allows you to attach a function to all wp-cron's registered in a WordPress site * @author Russell Fair * @uses wp_get_schedules to get a list of registered crons */ 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 does the actual cache clearing * @author Russell Fair */ function fac_cache_clear(){ //do your cache clearing here } 

Para limpar o cache da página apenas quando uma mensagem programada futura realmente muda seu status para publicar, o link ‘public_future_post’ é recomendado. Adicione o fragment de código às suas funções.php.

Não use o gancho ‘transition_post_status’, que também é executado. Minha debugging mostrou que às vezes a class necessária ‘W3_PgCacheFlush’ do plug-in W3TC não pode ser instanciada usando esse gancho.

 /** * This function clears the complete W3TC cache when a future post is published. * 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(); } } } 

Para alguém que chega aqui, existe uma maneira de executar algum código sempre que o URL do cron é chamado e pode ser feito simplesmente com o seguinte código:

 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' ) { // YOUR CODE GOES HERE } } 

Onde $ _SERVER [‘REQUEST_URI’] provavelmente pode ser omitido, mas não é perigoso.