アクセスがあるたびにwp-includes/cron.phpでwp-cron.phpを叩く必要があるかどうかを判定して、もし予約投稿などで変更がある場合はwp-cron.phpをHTTP:80経由で叩きにいく。
具体的な箇所
wp-includes/cron.php
function wp_cron() { // Prevent infinite loops caused by lack of wp-cron.php if ( strpos($_SERVER['REQUEST_URI'], '/wp-cron.php') !== false || ( defined('DISABLE_WP_CRON') && DISABLE_WP_CRON ) ) return; if ( false === $crons = _get_cron_array() ) return; $gmt_time = microtime( true ); $keys = array_keys( $crons ); if ( isset($keys[0]) && $keys[0] > $gmt_time ) return; $schedules = wp_get_schedules(); foreach ( $crons as $timestamp => $cronhooks ) { if ( $timestamp > $gmt_time ) break; foreach ( (array) $cronhooks as $hook => $args ) { if ( isset($schedules[$hook]['callback']) && !call_user_func( $schedules[$hook]['callback'] ) ) continue; spawn_cron( $gmt_time ); break 2; } } }
ここでwp-cron.phpを叩くかどうかの判定を行っており、これがアクセス毎に呼ばれる。
無駄なのでDISABLE_WP_CRONをtrueにすることで無効化にして、crontabでwp-cron.phpを定期的に実行するようにする。
wp-cron.phpの無効化やcrontabの設定方法などは参考文献からどうぞ。
参考 : https://hack-blog.net/archives/457