WordPress wp_schedule_event定时任务不触发,手动运行正常求助
问题核心原因
你的定时任务注册函数send_out_daily_mail没有绑定到任何WordPress初始化钩子上,这段代码永远不会被执行,自然不会生成send_mail_listing_expires定时事件。
修复步骤
- 给定时任务注册函数挂载执行钩子
在现有代码的最后添加一行,将注册函数绑定到WordPress初始化钩子上:
add_action('wp_loaded', 'send_out_daily_mail');
- 排查WP-Cron本身的运行限制
- 检查你的
wp-config.php文件中是否存在define('DISABLE_WP_CRON', true);配置,如果有就删掉或者改为false,这行配置会禁用原生WP-Cron功能 - 如果站点访问量极低,WP-Cron无法被前台访问触发,可以替换为系统级定时任务调用
wp-cron.php,不会影响现有代码逻辑
- 验证定时任务是否注册成功
可以安装WP Crontrol插件,在后台工具菜单中查看已注册的定时事件,确认send_mail_listing_expires事件存在且执行周期正确
其他优化建议
如果存在重复注册的定时事件,可以先清理旧实例再注册新事件,避免多任务冲突:
add_action('wp_loaded', function() { // 清理已存在的旧定时事件 $timestamp = wp_next_scheduled( 'send_mail_listing_expires' ); if( $timestamp ) { wp_unschedule_event( $timestamp, 'send_mail_listing_expires' ); } // 注册新定时事件 if ( ! wp_next_scheduled( 'send_mail_listing_expires' ) ) { wp_schedule_event( time(), '5min', 'send_mail_listing_expires' ); } });
如果需要每日执行一次定时任务,可以将wp_schedule_event的第二个参数改为daily,不需要额外自定义5分钟间隔。
内容的提问来源于stack exchange,提问作者Mark Gemesi
相关产品推荐
相关产品推荐

