WP Cron系统使用钩子添加新的计划任务。
添加钩子
为了使任务运行,您必须创建自己的自定义挂钩,并为该钩子的名称执行。这是一个非常重要的一步。忘记它,您的任务将永远不会运行。
以下示例将创建一个钩子。第一个参数是您要创建的挂钩的名称,第二个参数是要调用的函数的名称。
add_action( 'bl_cron_hook', 'bl_cron_exec' );
请记住,功能名称的“ bl_”部分是功能前缀。您可以了解为什么前缀很重要 这里。您可以阅读有关动作的更多信息 这里。安排任务
一个重要的说明是WP-Cron是一个简单的任务调度程序。如我们所知,由创建的挂钩添加了任务,以调用运行所需任务的函数。但是,如果您打电话wp_schedule_event()
即使使用相同的挂钩名称,该事件将多次安排多次。如果您的代码在每个页面上添加任务加载,则可能会导致安排数千次任务。这不是您想要的。
WordPress提供了一个方便的功能称为 wp_next_scheduled() 检查是否已经安排了特定的钩子。wp_next_scheduled()
采用一个参数,挂钩名称。它将返回包含下一个执行时间戳的字符串,要么是false的时间戳,因此未安排任务。它像这样使用:
wp_next_scheduled( 'bl_cron_hook' )
安排一项重复任务的任务是完成的 wp_schedule_event()。此功能采用三个必需的参数,还有一个附加参数,该参数可以传递给执行WP-Cron任务的函数。我们将重点关注前三个参数。参数如下:
$timestamp
– 该任务首次执行的UNIX时间戳$recurrence
– 任务将在几秒钟内重现的间隔的名称$hook
– 我们的自定义挂钩的名称
我们将使用创建的5秒间隔 这里 以及我们上面创建的钩子,就像:
wp_schedule_event( time(), 'five_seconds', 'bl_cron_hook' );
请记住,我们需要首先确保尚未安排任务。因此,我们将调度代码包装在这样的检查中:
if ( ! wp_next_scheduled( 'bl_cron_hook' ) ) {
wp_schedule_event( time(), 'five_seconds', 'bl_cron_hook' );
}
计划的任务
当您不再需要安排任务时,您可以使用 wp_unschedule_event()。此功能采用以下两个参数:
$timestamp
– 下一次任务的时间戳$hook
– 要称为自定义挂钩的名称
此功能不仅会使时间戳指示的任务不仅不安排,而且还将解开任务的所有未来发生。由于您可能不知道下一个任务的时间戳,因此还有另一个方便的功能,wp_next_scheduled() 那会为您找到它。wp_next_scheduled()
采用一个参数(我们关心的参数):
$hook
– 被称为执行任务的挂钩的名称
将所有内容放在一起,代码看起来像:
$timestamp = wp_next_scheduled( 'bl_cron_hook' );
wp_unschedule_event( $timestamp, 'bl_cron_hook' );
当您不再需要这些任务时,请突破任务非常重要,因为WordPress将继续尝试执行任务,即使它们不再使用(或在插件已停用或删除您的插件之后)。要记住任务的重要场所是插件停用。
不幸的是,WordPress.org插件目录中有许多插件不会自行清理。如果您找到其中一个插件,请让作者知道以更新其代码。WordPress提供了一个称为的功能 register_deactivation_hook() 这使开发人员可以在停用插件时运行一个函数。设置非常简单,看起来像:
register_deactivation_hook( __FILE__, 'bl_deactivate' );
function bl_deactivate() {
$timestamp = wp_next_scheduled( 'bl_cron_hook' );
wp_unschedule_event( $timestamp, 'bl_cron_hook' );
}
您可以阅读有关激活和停用钩的更多信息 这里。