WordPress添加计划任务的详细方法,实现自动任务

4.7
(3)

最近一个月一直在研究WordPress自动问答插件,经过各种折腾,最终实现了自动作答、可以同步作答,也可以异步作答。此外,也实现了自动提问。感兴趣的,可以查看文章:《WordPress自动问答插件,对接OpenAi ChatGPT》。

其中,异步作答和自动提问都用到了WordPress的计划任务。异步作答调用单次计划任务,当发现有问题被发布时,就添加单次任务;自动提问使用间隔计划任务,即每五分钟执行一次计划任务,检测是否存在待提交的问题。

WordPress添加计划任务的详细方法,实现自动任务

本文将介绍WordPress的计划任务添加方式。

自动间隔计划任务采用以下代码设置

// 自定义计划任务间隔
add_filter( 'cron_schedules', 'add_five_minutes_interval' );
function add_five_minutes_interval( $schedules ) {
	$schedules['qa_five_minutes'] = array(
		'interval' => 300,
		'display'  => __( 'Every 5 Minutes' ),
	);
	return $schedules;
}

wp_schedule_event( time(), 'qa_five_minutes', 'import_questions_event' );
// 注册计划任务回调函数
add_action( 'import_questions_event', 'import_questions_from_files' );

这里的坑在于,必须先设置自定义的任务间隔,才可以执行函数wp_schedule_event。否则,wp_schedule_event函数将无法执行,而且还不报错。这绝对是个坑。其中,import_questions_from_files为需要定期执行的函数。当然,设置一个计划任务需要考虑的因素有很多,比如什么时候添加任务,什么时候删除任务。高端一点,就需要后台设置是否添加自动任务。下面是我用来实现自动提问的一个计划任务例子,不包括具体的任务,只是个例子

add_filter( 'cron_schedules', 'add_five_minutes_interval' );
function add_five_minutes_interval( $schedules ) {
	$schedules['qa_five_minutes'] = array(
		'interval' => 300,
		'display'  => __( 'Every 5 Minutes' ),
	);
	return $schedules;
}
$options = get_option('qa_gpt_options');
$import_switch = isset($options['import_switch']) ? $options['import_switch'] : '';
// 自动提问计划任务
if ( $import_switch ) {
	// 添加计划任务
	if ( ! wp_next_scheduled( 'import_questions_event' ) ) {
		// 注册新的计划任务
		wp_schedule_event( time(), 'qa_five_minutes', 'import_questions_event' );
	}
}
else {
	// 删除计划任务
	if ( wp_next_scheduled( 'import_questions_event' ) ) {
		wp_unschedule_event( wp_next_scheduled( 'import_questions_event' ), 'import_questions_event' );
	}
}
// 注册计划任务回调函数
add_action( 'import_questions_event', 'import_questions_from_files' );

上述代码中,通过判断是否开启计划任务,执行删除或添加计划任务。

单次计划任务采用如下设置方法

wp_schedule_single_event(time() + 100, 'auto_comment_on_post_publish_async', array($post->ID));

其中,auto_comment_on_post_publish_async为要执行的函数。

计划任务的有效执行

WordPress的计划任务都是需要网站有流量才会执行的,我们很难保证网站一直有人访问,这个时候我们可以通过宝塔的计划任务,才触发WordPress的计划任务执行。方法,很简单,宝塔添加一个计划任务,每分钟访问一次/wp-cron.php文件即可。详情如下图

WordPress添加计划任务的详细方法,实现自动任务

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/5865.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2023年04月14日 20:03
下一篇 2023年04月18日 19:42

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号