我使用wp_schedule_event()将任务安排为每小时在我的网站上运行一次。由于某种原因,我要运行的功能正在运行,事件本身显示在“ cron”选项表下。一切似乎都很好,但是当我等待并检查功能是否运行时,我什么都没有。
我每小时使用一次进行测试,但这是每天一次
这是php代码的完整摘要:
/*
======================================================
MANAGE SUB CANCELLATIONS
1 - daily event to run
2 - manage_sub_cancel()
======================================================
*/
/* *
*
* -- > 1 - daily event to run
*
* */
add_action( 'wp', 'check_sub_activation' );
function check_sub_activation() {
if ( ! wp_next_scheduled( 'check_sub_event' )) {
wp_schedule_event( current_time( 'timestamp' ), 'hourly', 'check_sub_event' ); // creating the hook
}
}
// add_action( 'wp', 'check_sub_deactivation');
function check_sub_deactivation() { // will clear the scheduled hook if activated
wp_clear_scheduled_hook('check_sub_event');
}
/* *
*
* -- > 2 - manage_sub_cancel()
*
* */
function manage_sub_cancel() { // This function will apply the cancellation of a boutique when period end is reached
$args = array(
'post_type' => 'boutique',
'meta_key' => 'cancel_at_end',
'meta_value' => 'true',
'meta_compare' => '=',
);
$the_query = new WP_Query( $args );
$boutique_list = $the_query->posts;
foreach ( $boutique_list as $boutique ) {
$boutique_id = $boutique->ID;
$period_end = get_post_meta( $boutique_id, 'period_end', true );
$today = time();
if ( $today < $period_end ) { // À INVERSER LORSQUE TERMINÉ
update_post_meta( $boutique_id, 'sub_id', "" );
update_post_meta( $boutique_id, 'pckg_id', "1" );
update_post_meta( $boutique_id, 'cancel_at_end', "false" );
update_post_meta( $boutique_id, 'period_end', "" );
} else {
// Period end is not passed
}
}
}
add_action( 'check_sub_event', 'manage_sub_cancel' ); // add manage_sub_cancel() function to 'check_sub_event' hook we just created
我也在使用插件Advanced Cron Manager列出所有cron作业,我确实看到了我在这里创建的作业,我也可以“立即执行”并且可以正常工作..但是当我等到偶数运行时小时,即使我访问该网站也看不到任何内容。我不知道一切看起来都很好,但是什么也没发生。
答案 0 :(得分:0)
WordPress cron作业不是实际的cron作业。 WordPress将在下次执行脚本时(即当用户访问导致脚本运行的页面时)检查作业是否已运行,然后在需要时运行cron作业。如果没有人加载网页,则该脚本将无法运行,因此您的cron作业也将无法运行。
您只有几个选项可以解决此限制:
root
访问托管环境的权限,则创建一个实际的cron作业以定期(例如,每十分钟一次)触发页面加载。 root
访问权限,请设置自己的个人服务器,然后在此新服务器上执行#1。 那些按优先顺序列出。 #1最好,#2更昂贵,稍微复杂一点,但仍然是一个合理的选择,而#3则很糟糕且不可靠,但可能会出现故障。