アクセスがあるたびに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

関連記事