WordPress中get_core_updates()在CRON事件调用时报错的解决方案咨询
解决WordPress CRON事件中调用
get_core_updates()报错的问题 问题原因
get_core_updates()属于WordPress更新模块的函数,这个模块默认仅在wp-admin后台环境中自动加载。而CRON任务通过wp-cron.php执行时,不会自动加载更新相关的核心文件,因此会触发「函数未定义」的致命错误。
解决方案
方法1:手动加载更新模块依赖文件
在CRON任务的回调函数开头,先检查函数是否存在,若不存在则手动加载对应的核心文件:
function send_update_report_via_cron() { // 检查get_core_updates是否可用,不可用则加载依赖文件 if ( ! function_exists( 'get_core_updates' ) ) { require_once ABSPATH . 'wp-admin/includes/update.php'; // 如果需要获取插件更新信息,还需加载plugin.php require_once ABSPATH . 'wp-admin/includes/plugin.php'; } // 正常调用get_core_updates获取更新数据 $core_updates = get_core_updates(); // 此处编写邮件发送逻辑... } // 注册CRON任务(示例) add_action( 'my_custom_update_report_cron', 'send_update_report_via_cron' );
update.php包含了get_core_updates()及其他更新相关核心函数,按需加载即可。
方法2:触发WordPress内置更新检查逻辑
通过调用WordPress内置的更新检查函数,自动加载依赖模块并获取最新更新数据:
function send_update_report_via_cron() { // 触发核心版本检查,自动加载更新模块依赖 wp_version_check(); // 若需插件更新数据,触发插件更新检查 wp_update_plugins(); // 此时可正常调用get_core_updates() $core_updates = get_core_updates(); // 邮件发送逻辑... } add_action( 'my_custom_update_report_cron', 'send_update_report_via_cron' );
这种方式不仅能解决函数未定义的问题,还能确保获取到的是最新的官方更新数据,避免使用缓存的旧数据。
注意事项
- 确保CRON任务的注册逻辑在WordPress初始化完成后执行(比如挂在
init钩子之后,或插件主文件的末尾),避免出现其他依赖问题。 - 多站点环境下,若需获取站点级更新数据,可替换为
get_site_core_updates(),加载逻辑保持一致。
内容的提问来源于stack exchange,提问作者madcoc5
相关产品推荐
相关产品推荐

