描述
添加将由WordPress按指定间隔触发的钩子。当有人访问您的WordPress站点时,如果计划时间已过,则会触发此操作。
重复周期的有效值为“hourly”(每小时)、“daily”(每日)和“twicedaily”(每天两次)。可以使用wp_get_schedules()中的‘cron_schedules’过滤器扩展这些功能。
请注意,除非为每个已调度事件传递唯一的$args
值,否则将忽略使用相同动作钩子将事件调度为在现有事件发生后10分钟内发生的事件。
使用wp_next_scheduled()防止重复事件。
使用wp_schedule_single_event()计划非定期事件。
参数
- $timestamp
-
(int)(必填) 下一次运行事件的时间戳(UTC)。
- $recurrence
-
(string)(必填) 事件随后应重复发生的频率。有关可接受的值,请参见wp_get_schedules()。
- $hook
-
(string)(必填) 运行事件时要执行的动作钩子。
- $args
-
(array)(可选) 包含要传递给钩子回调函数的参数的数组。数组中的每个值都作为单个参数传递给回调。数组键被忽略。
默认值: array()
- $wp_error
-
(bool)(可选) 失败时是否返回WP_Error。
默认值: false
返回
(bool|WP_Error) 如果事件成功调度,则为true,失败时为false或WP_Error。
源码
更新日志
版本 | 描述 |
---|---|
5.7.0 | 添加了$wp_error 参数。 |
5.1.0 | 返回值修改为布尔值,指示成功或失败,添加了‘pre_schedule_event’过滤器以使函数短路。 |
2.1.0 | 开始引入 |
使用示例
用多个参数计划每小时的事件
wp_schedule_event()传递参数安排每小时事件,因此我们必须将多个数据作为索引数组发送。register_activation_hook( __FILE__, 'my_activation' ); function my_activation() { $args = array( $args_1, $args_2 ); if (! wp_next_scheduled ( 'my_hourly_event', $args )) { wp_schedule_event( time(), 'hourly', 'my_hourly_event', $args ); } }
不要忘记在add_action()上添加参数总数为$accepted_args。
add_action( 'my_hourly_event', 'do_this_hourly', 10, 2 ); function do_this_hourly($args_1, $args_2 ) { // do something every hour }
不要忘记在停用时清理调度程序:
register_deactivation_hook( __FILE__, 'my_deactivation' ); function my_deactivation() { wp_clear_scheduled_hook( 'my_hourly_event' ); }
安排每小时事件
要在插件中安排每小时的事件,请在激活时调用wp_schedule_event
(否则您将得到大量计划事件!):register_activation_hook( __FILE__, 'my_activation' ); add_action( 'my_hourly_event', 'do_this_hourly' ); function my_activation() { wp_schedule_event( time(), 'hourly', 'my_hourly_event' ); } function do_this_hourly() { // do something every hour }
不要忘记在停用时清理调度程序:
register_deactivation_hook( __FILE__, 'my_deactivation' ); function my_deactivation() { wp_clear_scheduled_hook( 'my_hourly_event' ); }
需要注意的是,根据钩子的资源密集程度,“等待用户访问站点”的默认行为可能并不合适。当然,您应该尽可能提高代码的效率——但是如果您有一个特定的情况,即它仍然是资源密集型的,那么您不希望在钩子工作时让用户坐在白色屏幕上。
对于特定情况,您可能需要考虑禁用WP的内部CRON,方法是将以下行:
define('DISABLE_WP_CRON', 'true');
}
放入文件:wp-config.php
然后使用主机控制面板创建一个CRON作业来获取URL:
https://example.com/wp-cron.php?doing_wp_cron或execute:
/usr/bin/php -q /path-to-your-wp-installation/wp-cron.php您的特定环境可能会有所不同。
注意:如果使用自定义重复,请确保在添加cron_schedules筛选器后调用wp_schedule_event。
一个实际的最佳实践示例。
function svd_deactivate() { wp_clear_scheduled_hook( 'svd_cron' ); } add_action('init', function() { add_action( 'svd_cron', 'svd_run_cron' ); register_deactivation_hook( __FILE__, 'svd_deactivate' ); if (! wp_next_scheduled ( 'svd_cron' )) { wp_schedule_event( time(), 'daily', 'svd_cron' ); } }); function svd_run_cron() { // do your stuff. }
每分钟。
add_filter( 'cron_schedules', function ( $schedules ) { $schedules['per_minute'] = array( 'interval' => 60, 'display' => __( 'One Minute' ) ); return $schedules; } );
用法
<?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>