这是我第一次尝试使用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\'));
}
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\' );
}
显然,如果您取消并重新激活插件,这可能会导致问题。