当前浏览:首页 / WordPress函数 / wp_schedule_event()

wp_schedule_event( int $timestamp, string $recurrence, string $hook, array $args = array(), bool $wp_error = false )

添加定期计划任务事件

event

schedule 计划任务


描述

添加将由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开始引入

使用示例

  • 示例1

    用多个参数计划每小时的事件
    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' );
    }
  • 示例2

    安排每小时事件
    要在插件中安排每小时的事件,请在激活时调用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' );
    }
  • 示例3

    需要注意的是,根据钩子的资源密集程度,“等待用户访问站点”的默认行为可能并不合适。当然,您应该尽可能提高代码的效率——但是如果您有一个特定的情况,即它仍然是资源密集型的,那么您不希望在钩子工作时让用户坐在白色屏幕上。

    对于特定情况,您可能需要考虑禁用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

    您的特定环境可能会有所不同。

  • 示例4

    注意:如果使用自定义重复,请确保在添加cron_schedules筛选器后调用wp_schedule_event

  • 示例5

    一个实际的最佳实践示例。

    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.
    }
    
  • 示例6

    每分钟。

    add_filter( 'cron_schedules', function ( $schedules ) {
       $schedules['per_minute'] = array(
           'interval' => 60,
           'display' => __( 'One Minute' )
       );
       return $schedules;
    } );
  • 示例7

    用法

    <?php wp_schedule_event(time(), 'hourly', 'my_schedule_hook', $args); ?>