php - WordPress Cron API 是否在后台运行?

标签 php cron wordpress

我正在阅读 wp-includes 中的 cron.php 代码,spawn_cron() 似乎是实际执行注册任务的代码。

函数的最后两行:

$cron_url = site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron );

wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );

它只是打开 wp-cron.php,将任务作为查询参数传递。

cron.php 顶部的 API 说明:

* Schedules a hook which will be executed once by the WordPress actions core at 
* a time which you specify. The action will fire off when someone visits your
* WordPress site, if the schedule time has passed.`

我的问题是,假设访问者打开网站的其中一个页面,然后注册的任务由 cron API 触发。如果任务很重并且需要几分钟才能完成,访问者是否会得到一个直到任务完成才完全加载的页面?

[编辑] 为了澄清我的问题,问题是 WP Cron API 是否在页面加载完成后运行任务?

最佳答案

$cron_url = site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron );
wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );

使用下面的示例插件,我确认上面的代码(我也在问题中引用)是实际调用计划任务的代码。它设置 0.0.1 超时并访问 wp-cron.php。这意味着如果有 100 个任务,加载所有任务需要 1 秒。所以对页面加载速度影响不大。但这似乎是一件不必太担心的事情。

<?php
/* Plugin Name: Sample Cron Task */ 

    // I used `heavy` because this code was initially written to test how it affects the server response if a heavy task is registered as a cron job. So forget about the naming.
add_action('admin_menu', 'sample_cron_heavy_task');
function sample_cron_heavy_task() {
    add_options_page(
        'Sample Cron Heavy Task', 
        'Sample Cron Heavy Task', 
        'manage_options',
        'sample_cron_heavy_task', 
        'sample_cron_heavy_task_admin');
}
function sample_cron_heavy_task_admin() {
    ?>
    <div class="wrap">
    <?php
        wp_schedule_single_event(time(), 'my_action_name');
        $cron_url = site_url( 'wp-cron.php?doing_wp_cron=' . $doing_wp_cron );
        // executes the registered task immediately 
        wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );
        echo get_option('sample_cron_heavy_task');
    ?>
    </div>
    <?php
}

add_action('my_action_name', 'myevent'); 
function myevent() {
    $msg = date('Y m d h:i:s A') . ': the cron task is called.<br />';
    update_option('sample_cron_heavy_task', $msg);
}

关于php - WordPress Cron API 是否在后台运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398543/

相关文章:

scala - Play 2.4.x 中的 Crontab 风格调度?

drupal - 使用 Drush 运行单独的 cron 作业

Bash 脚本未在 Cron 中正确执行

php - 如何在wordpress中使用jquery获取图像的URL?

php - laravel Eloquent 地创建数据库条目但具有空值

php - php和mysql中的结果显示问题

PHP/ldap_bind Active Directory 无法验证 OU,但可以使用默认用户组进行验证

php - 在 WP_Query 中获取 WooCommerce 特色产品

php - 用 WooCommerce 3 中选择的变化价格替换可变价格范围

PHP自定义session机制——以及cookie过期问题