WordPress Cron任务未执行指定函数问题求助
解决WordPress Cron任务未执行指定函数的问题
你的Cron任务已经被成功调度,但绑定的函数没触发,核心问题出在action注册的时机错误,另外还有几个可以优化的点,我来一步步帮你解决:
核心问题:Action注册在激活钩子内
你把add_action('immo_import_check_import_folders', 'immo_import_check_import_folders2');写在了immo_import_activation()激活函数里——但激活钩子只会在插件被激活的那一次运行,之后每次网站加载时,这个action并不会被注册,所以当Cron触发immo_import_check_import_folders钩子时,根本找不到对应的执行函数。
修正步骤及优化代码
1. 全局注册Action
把action注册代码移到全局作用域,确保每次插件加载时都能绑定钩子和函数:
2. 激活时避免重复调度
在激活函数里先清除旧的调度任务,再添加新的,防止多次激活导致重复调度:
3. 添加调试日志(可选)
可以在执行函数里加入日志,确认函数是否真的被触发,方便排查问题。
修正后的完整代码:
// 全局注册Action,确保每次插件加载都能绑定 add_action( 'immo_import_check_import_folders', 'immo_import_check_import_folders2' ); register_activation_hook(__FILE__, 'immo_import_activation'); register_deactivation_hook(__FILE__, 'immo_import_deactivation'); function immo_import_activation() { // 先清除旧的调度,避免重复 wp_clear_scheduled_hook('immo_import_check_import_folders'); // 重新调度任务 wp_schedule_event( time(), 'minutely', 'immo_import_check_import_folders' ); } function immo_import_deactivation() { wp_clear_scheduled_hook('immo_import_check_import_folders'); } function immo_import_check_import_folders2() { // 添加调试日志,查看是否执行(可删除) error_log('Immo Import Cron function executed at: ' . current_time('mysql')); $my_post = array( 'post_title' => wp_strip_all_tags( 'Test' ), 'post_content' => 'test .......', 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array( 8,39 ) ); // 插入文章并捕获结果,方便调试 $post_id = wp_insert_post($my_post); if (is_wp_error($post_id)) { error_log('Immo Import Post Insert Error: ' . $post_id->get_error_message()); } else { error_log('Immo Import Post Inserted with ID: ' . $post_id); } }
额外排查点
- 确认分类ID
8和39确实存在,否则文章会被分到默认分类(或无分类) - 检查服务器的PHP错误日志,看是否有
wp_insert_post的报错信息 - 可以用插件比如WP Crontrol来查看Cron任务的状态,确认任务是否在调度列表中
内容的提问来源于stack exchange,提问作者yfain
相关产品推荐
相关产品推荐

