WP-Control插件中自定义Cron任务未显示的问题求助
解决WordPress自定义Cron调度不显示在WP-Control的问题
嘿,我瞅了你的代码,发现两个核心问题导致自定义调度没出现在WP-Control的列表里,咱们来逐个修正:
问题1:重复绑定同一个函数到动作和过滤器
你把cron_add_everyday同时挂到了plugins_loaded动作和cron_schedules过滤器上,这会造成逻辑冲突——过滤器需要接收并返回修改后的调度数组,而动作不需要返回值,这种重复绑定会让WordPress无法正确处理你的自定义调度。
问题2:直接覆盖默认调度数组
在函数里你直接用$schedules = array('everyday' => ...)把原有调度数组完全替换了,这不仅会让自定义调度无法被正确合并,还会弄丢WordPress自带的所有默认调度(比如 hourly、twicedaily 这些)。正确的做法是把新调度合并到原有数组里,而不是覆盖。
修正后的完整代码
// 注册自定义调度规则 add_filter( 'cron_schedules', 'add_custom_daily_schedule' ); function add_custom_daily_schedule( $schedules ) { // 合并新调度到原有数组,保留默认调度 $schedules['everyday'] = array( 'interval' => 86400, // 86400秒 = 1天 'display' => __( 'Every Day' ) ); return $schedules; } // 注册具体的库存更新Cron任务 add_action( 'plugins_loaded', 'register_daily_inventory_cron' ); function register_daily_inventory_cron() { // 避免重复注册任务 if ( ! wp_next_scheduled( 'daily_inventory_update_hook' ) ) { wp_schedule_event( time(), 'everyday', 'daily_inventory_update_hook' ); } } // 实际执行库存更新的函数 add_action( 'daily_inventory_update_hook', 'run_daily_inventory_update' ); function run_daily_inventory_update() { // 这里写入你的库存更新逻辑 error_log( '每日库存更新任务已执行' ); }
额外需要注意的步骤
- 触发Cron系统识别新配置:修改代码并保存后,刷新一次WordPress后台页面(或访问网站前端),这样WordPress才会加载新的调度规则。
- 检查WP-Control列表:刷新WP-Control的Cron页面,现在应该能看到
everyday自定义调度,以及绑定的daily_inventory_update_hook任务。 - 调试技巧:如果还是看不到,可以临时加一段调试代码确认调度是否注册成功:
add_action( 'admin_notices', 'debug_cron_schedules' ); function debug_cron_schedules() { $schedules = wp_get_schedules(); echo '<pre>' . print_r( $schedules, true ) . '</pre>'; }
这段代码会在后台顶部打印所有已注册的调度,你可以检查everyday是否在列表中。
内容的提问来源于stack exchange,提问作者Alexis Garcia
相关产品推荐
相关产品推荐

