WordPress 4.3 产生大量定时作业修复方法
升级到 WordPress 4.3 之后,这几天发现系统有点慢,打开定时作业,发现有大量的 hook 名为时间戳的定时作业,经过 debug,发现是 _wp_check_for_scheduled_split_terms
这个函数生成的,他的源代码是:
function _wp_check_for_scheduled_split_terms() {
if ( ! get_option( 'finished_splitting_shared_terms' ) && ! wp_next_scheduled( 'wp_batch_split_terms' ) ) {
wp_schedule_single_event( 'wp_batch_split_terms', time() + MINUTE_IN_SECONDS );
}
}
这个定时作业的意思是,定期的把 shared terms 分离。wp_schedule_single_event
的第一个参数是 $timestamp, 第二个才是 $hook,这段代码竟然写反了,然后就产生了一大堆定时作业,使得正常的定时作业都无法工作了。
所以要让这个函数不要跑,经过搜索发现:
add_action( 'admin_init', '_wp_check_for_scheduled_split_terms' );
_wp_check_for_scheduled_split_terms
这个函数是 admin_init
调用的,只要 remove_action
就好了。
所以最终的解决方案是:
在当前主题的 functions.php
文件中添加如下代码:
remove_action( 'admin_init', '_wp_check_for_scheduled_split_terms' );