いくつかのアクション イベントをスケジュールした直後に、WordPress の cron タスクを実行しようとしています。通常、WordPress Cron は、スケジュールされたタスクをトリガーするために少なくとも別のページの読み込みを行います。さっそくやろうとしています。以下のコードに示すように、私はほとんどそれを行うことができました。
/* Plugin Name: Sample Cron Immediate Execution */
add_action('admin_menu', 'sample_cron_immediate_execution');
function sample_cron_immediate_execution() {
add_options_page(
'Sample Cron Immediate Execution',
'Sample Cron Immediate Execution',
'manage_options',
'sample_cron_immediate_execution',
'sample_cron_immediate_execution_admin');
}
function sample_cron_immediate_execution_admin() {
?>
<div class="wrap">
<?php
wp_schedule_single_event(time(), 'my_action1');
wp_schedule_single_event(time(), 'my_action2');
$cron_url = site_url( 'wp-cron.php?doing_wp_cron=0');
wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );
echo 'cron tasks should be executed by now.';
?>
</div>
<?php
}
add_action('my_action1', 'myeventfunc1');
function myeventfunc1() {
sleep(10); // assuming it's a heavy task
sample_log(date('l jS \of F Y h:i:s A'), __DIR__ . '/myevent1_log.html');
}
add_action('my_action2', 'myeventfunc2');
function myeventfunc2() {
sleep(10); // assuming it's a heavy task
sample_log(date('l jS \of F Y h:i:s A'), __DIR__ . '/myevent2_log.html');
}
function sample_log($time, $file) {
file_put_contents($file, $time . '<br />', FILE_APPEND);
}
問題は、タスクの 1 つが重い場合、WordPress が の 1 回の呼び出しですべてのタスクを完了しないように見えることですwp-cron.php
。doing_wp_cron
コア ファイルのコードを表示すると、$_GET の値が関係していると推測しています。
コメントの1つは言う
グローバル $doing_wp_cron ロックを使用するか、GET ロックを使用します。ロックがない場合は、新しいロックを取得しようとします。
これが何についてなのか、私は完全には理解していません。私がやりたいのは、タスクの重さに関係なく、別のページを開く必要なく、複数のスケジュールされたタスクをすぐに実行することです。
情報ありがとうございます。