最近一个月一直在研究WordPress自动问答插件,经过各种折腾,最终实现了自动作答、可以同步作答,也可以异步作答。此外,也实现了自动提问。感兴趣的,可以查看文章:《WordPress自动问答插件,对接OpenAi ChatGPT》。
其中,异步作答和自动提问都用到了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文件即可。详情如下图
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/5865.html