参数
$new_schedules
array[]-
非默认的cron计划任务数组。默认为空。
更多信息
过滤器接受数组中的非默认cron计划任务数组(多维数组)。外部数组有一个键,该键是计划的名称(例如,“weekly”)。其值是一个具有两个键的数组,一个是“interval”,另一个是“display”。
“interval”是cron计划运行时间的秒数。因此,对于每小时计划,“interval”值将为3600或60*60。对于每周计划,“interval”值为60*60*24*7或604800。
“display”是非默认cron计划的描述。对于“weekly”键,“display”可能是__(‘Once weekly)。
为什么这很重要?
当计划使用WordPress Cron服务运行自己的操作时,您必须指定WordPress应该使用的时间间隔。WordPress有自己的、有限的、默认的时间间隔或“时间表”,包括“hourly”(每小时)、“twicedaily”(每两天)和“daily”(每天)。此过滤器允许您将自己的间隔添加到默认设置。
对于您的插件,将向您传递一个数组,您可以通过执行以下操作轻松添加每周计划:
function my_add_weekly( $schedules ) { // add a 'weekly' schedule to the existing set $schedules['weekly'] = array( 'interval' => 604800, 'display' => __('Once Weekly') ); return $schedules; } add_filter( 'cron_schedules', 'my_add_weekly' );
添加多个间隔的工作原理类似:
function my_add_intervals($schedules) { // add a 'weekly' interval $schedules['weekly'] = array( 'interval' => 604800, 'display' => __('Once Weekly') ); $schedules['monthly'] = array( 'interval' => 2635200, 'display' => __('Once a month') ); return $schedules; } add_filter( 'cron_schedules', 'my_add_intervals');
确保将计划添加到传递的数组中,如示例所示。如果您只返回自己的时间表数组,则可能会删除其他插件创建的时间表。
源码
更新日志
版本 | 描述 |
---|---|
2.1.0 | 开始引入 |
使用示例
添加一个自定义cron计划为每5分钟:
/** * Adds a custom cron schedule for every 5 minutes. * * @param array $schedules An array of non-default cron schedules. * @return array Filtered array of non-default cron schedules. */ function devhub_custom_cron_schedule( $schedules ) { $schedules[ 'every-5-minutes' ] = array( 'interval' => 5 * MINUTE_IN_SECONDS, 'display' => __( 'Every 5 minutes', 'devhub' ) ); return $schedules; } add_filter( 'cron_schedules', 'devhub_custom_cron_schedule' );
自定义cron计划,每10 & 15秒
function custom_cron_job_recurrence( $schedules ) { if(!isset($schedules['10sec'])) { $schedules['10sec'] = array( 'display' => __( 'Every 10 Seconds', 'twentyfifteen' ), 'interval' => 10, ); } if(!isset($schedules['15sec'])) { $schedules['15sec'] = array( 'display' => __( 'Every 15 Seconds', 'twentyfifteen' ), 'interval' => 15, ); } return $schedules; } add_filter( ‘cron_schedules’, ‘custom_cron_job_recurrence’ );
添加用户定义的间隔值:
使用函数方法add_filter( 'cron_schedules', 'wpdocs_add_cron_interval' ); function wpdocs_add_cron_interval( $schedules ) { $options = get_option( 'wpdocs_custom_interval' ); $interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS ); $schedules['wpdocs_interval'] = array( 'interval' => $interval, 'display' => esc_html__( 'Custom Interval' ) ); return $schedules; }
使用基于类的方法
add_filter( 'cron_schedules', array( $this, 'add_cron_interval' ) ); /** * Adds custom time intervals for the cron. */ private function add_cron_interval( $schedules ) { $options = get_option( 'wpdocs_custom_interval' ); $interval = ( ! empty( $options ) ? absint( $options ) * HOUR_IN_SECONDS : DAY_IN_SECONDS ); $schedules['wpdocs_interval'] = array( 'interval' => $interval, 'display' => esc_html__( 'Custom Interval' ) ); return $schedules; }
为了节省您的时间,我建议您始终在每次页面加载时运行的主要动作中挂接
cron_schedules
过滤器。像init
或wp_loaded
。在使用自定义计划编写代码之前,还可以挂接到该过滤器。例如:
// function that registers new custom schedule function bf_add_custom_schedule( $schedules ) { $schedules[ 'every_five_minutes' ] = array( 'interval' => 300, 'display' => 'Every 5 minutes', ); return $schedules; } // function that schedules custom event function bf_schedule_custom_event() { // the actual hook to register new custom schedule add_filter( 'cron_schedules', 'bf_add_custom_schedule' ); // schedule custom event if( !wp_next_scheduled( 'bf_your_custom_event' ) ) { wp_schedule_event( time(), 'every_five_minutes', 'bf_your_custom_event' ); } } add_action( 'init', 'bf_schedule_custom_event' ); // fire custom event function bf_do_something_on_schedule() { // your code... } add_action( 'bf_your_custom_event', 'bf_do_something_on_schedule' );
这种方法可以确保在
wp_schedule_event
函数中使用自定义计划之前始终注册该计划。并将您从令人讨厌的"invalid_schedule":"Event schedule does not exist."
错误中拯救出来。干杯:)