如何在班级中使用wp_Schedule_Event?

时间:2012-08-21 作者:dev-jim

这是我第一次尝试使用OOP方法编写应用程序。我还不太明白。目前我有一个cron挂钩:

if( !wp_next_scheduled( \'my_cron_hook\' ) ) {
    //schedule the event to run daily
    wp_schedule_event( current_time( \'timestamp\' ), \'daily\', \'my_cron_hook\' );
}
add_action(\'my_cron_hook\',array($this,\'do_daily_job\'));
似乎它不能使用if 直接在类内。我是否需要将上面的整个代码放入__construct() 作用

还有,我在WordPress中找到了这个wp_schedule_event documentation.

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\');
wp钩子在这里是什么意思?我从未在hook API中看到过这一点。我是否应该将cron代码(如上)包装在一个函数中,并将此“wp”操作放在__construct() 功能,像这样?

function __construct() {
    add_action(\'wp\', array($this,\'my_activation\'));
}

function my_activation() {
    if( !wp_next_scheduled( \'my_cron_hook\' ) ) {
        //schedule the event to run daily
        wp_schedule_event( current_time( \'timestamp\' ), \'daily\', \'my_cron_hook\' );
    }
    add_action(\'my_cron_hook\',array($this,\'do_daily_job\'));
}   

3 个回复
SO网友:Jonathan

在类定义之外添加操作:

add_action(\'my_unique_plugin_event_hook\', array($this,\'hook\'));
然后在活动中使用:

wp_schedule_event(time(), \'daily\', \'my_unique_plugin_event_hook\');

SO网友:i-4Web

您可以在类中创建一个函数,并在构造函数中调用挂钩。下面的代码与您显示的代码类似。如果将其创建到插件中,则可以在激活时实例化类并创建cron作业。除了下面的代码之外,这里还有一个关于PHP中Cron作业的好链接Managing Cron Jobs in PHP

class My_Class {
function __construct() {
    //Register ajax scripts
    add_action( \'admin_enqueue_scripts\', array( $this, \'register_ajax_scripts\' ) );
}

/**
 * Registers and enqueues admin-specific JavaScript.
 */    
public function register_ajax_scripts() {    
    wp_enqueue_script (\'test-ajax\' , plugins_url( \'myPlugin/test-ajax.js\' ));
}

SO网友:djb

如果您试图将if语句直接放在类中,PHP将抛出语法错误-在这些花括号之间只能插入变量声明(例如public $foo) 和功能(例如function bar(){ /*stuff*/}).

从类构造函数或类中的任何其他函数设置作业是绝对正确的。只需确保在添加钩子之前及时实例化该类(并调用必要的函数,如果它不在构造函数中)。

简而言之,WP是一个钩子,在加载整个内容、获取所有帖子等时,但在加载模板之前触发。

一些人会争辩说,注册cron作业的最佳方法是将其附加到activation hook. 这是一个只有在插件第一次激活时才会触发的钩子。否则,您可能会多次注册同一作业,这有明显的缺点。这就是您包含的codex中的代码的目的-检查它是否尚未计划。这是一种方法,这是另一种方法。

在主类开始之前(例如在标题信息位于顶部的base plugin.php文件中),您的代码应该如下所示

register_activation_hook( __FILE__, \'62565_activate\');

function 62565_activate() {
     wp_schedule_event( current_time( \'timestamp\' ), \'daily\', \'my_cron_hook\' );
}
显然,如果您取消并重新激活插件,这可能会导致问题。

结束

相关推荐

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