add_action to wp cron?

时间:2012-04-23 作者:FLX

我想在每次wordpress cron运行时都执行一些代码,而不管时间框架如何。是否可以为此创建add\\u操作?我查看了筛选列表,但找不到任何相关内容。

谢谢

5 个回复
最合适的回答,由SO网友:Scott 整理而成

基本上,每个页面加载都会查看是否有任何计划要运行的内容,因此根据该逻辑,cron会被检查,并且可能会在每个页面加载上运行。

我只能假设你想安排一些经常运行的东西。如果是这样的话,你需要看看wp_schedule_event()

下面是让一些代码每小时运行一次的代码:

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
}
如果您想在其他人的cron运行时启动自己的代码,那么您需要与他们启动的操作相关联。因此,让我们假设上面的代码是其他人的插件,您希望在每次运行他们的插件时启动您的代码。

他们创造了这样一个动作:

add_action(\'my_hourly_event\', \'do_this_hourly\');

因此,您需要做的就是将您的函数背驮到以下内容上:

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

SO网友:Stephen Harris

在OP的这句话之后:

更清楚地说,我已经安排了将来的帖子,我希望在通过wp cron触发器发布时清除缓存。也许有更好的方法?

我不知道W3 Total Cache插件是否在发布帖子时不会自动刷新缓存。我相信是的。如果没有,那么在这段时间里,我会钩住过渡后的钩子(see related question), 然后刷新缓存。这样,每当post更改状态时(通过wp cron或其他方式),缓存都会更新以反映这一点。

 //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();
 }
原始问题回答原始问题:每当启动wp cron时都会启动一个函数-我认为这在编程上是不可能的-而@Brady给出的解决方案可能是最接近您的解决方案。

SO网友:rfair404

最近,我不得不对w3 total cache做同样的事情,下面是我如何实现它的(简化为回答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


}

SO网友:jot

要仅在将来计划的帖子实际将其状态更改为发布时清除页面缓存,建议使用挂钩“publish\\u future\\u post”。将代码段添加到函数中。php。

不要使用已执行的挂钩“transition\\u post\\u status”。我的调试确实表明,有时W3TC插件中必需的类“W3\\u PgCacheFlush”无法使用此挂钩实例化。

/**
 * 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();
    }
  }
}

SO网友:Mauro Mascia

对于到达这里的人,有一种方法可以在每次调用cron URL时执行一些代码,只需使用以下代码即可:

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
    }
}
其中,$\\u服务器[\'REQUEST\\u URI\']可能可以省略,但并不危险。

结束

相关推荐

WP-cron.php-如何删除WP的Cron瞬变?

我有一个Wordpress网络,我的任务是禁用WP Cron并将其替换为Apache Cron。我已经设置了一个PHP脚本,当Apache Cron调用该脚本时,它将在网络下的所有站点中循环,并向该站点的wp Cron发出请求。php页面,从而执行其cron。我想使用Wordpress的瞬态特性来限制我的PHP脚本,因为Wordpress限制了自己的cron。然而,当我深入研究代码时,我看到doing\\u cron瞬态已设置(在cron.php#217中),但从未取消设置。瞬态是否一直未设置,或者Wor