Opened 9 months ago
Last modified 9 months ago
#60657 new defect (bug)
wp_schedule_event problem
Reported by: | odoremieux | Owned by: | |
---|---|---|---|
Milestone: | Awaiting Review | Priority: | normal |
Severity: | normal | Version: | 6.4.3 |
Component: | Cron API | Keywords: | |
Focuses: | Cc: |
Description (last modified by )
In some cases there are some problems with wp_schedule_event. It schedule the event, if we use wp_next_scheduled, it gives a timestamp, but using WP Crontrol, it doesn't appear there.
Below some code to reproduce it.
If you click on the button, it will schedule 500 events. Wait a bit, that 100 or so are processed (look at the logs or use WP Control to check). Then click again. The logs show that they should have been schedules, there is a timestamp and the transient is created. But it's not really scheduled, it doesn't appear with WP Control, and the transient is not deleted (for the 2nd round)
if (!class_exists("NSM_Test_Cron")) { class NSM_Test_Cron { function __construct() { add_action('admin_menu', array($this, 'my_custom_button_menu')); add_filter('cron_schedules', array($this, 'cron_schedules')); add_action('nsm_test_cron', array($this, 'nsm_test_cron')); } public function cron_schedules($schedules) { if (!isset($schedules['nsm_60_seconds'])) { $schedules['nsm_60_seconds'] = array('interval' => 60, 'display' => '60 Seconds'); } return $schedules; } function my_custom_button_menu() { add_menu_page('My Custom Button', 'Custom Button', 'manage_options', 'my-custom-admin-button', array($this, 'my_custom_button_page')); } function my_custom_button_page() { error_log('my_custom_button_page'); if (isset($_POST['action']) && $_POST['action'] == 'myaction') { error_log('my_custom_button_page action'); for ($index = 0; $index < 500; $index++) { $args = array(array('email' => 'toto@foo.org', 'user_id' => '1234', 'tags' => $index)); if (!wp_next_scheduled('nsm_test_cron', $args)) { $error = wp_schedule_event(time(), 'nsm_60_seconds', 'nsm_test_cron', $args, true); set_transient( 'doing_cron_' . $index, $index ); error_log('error -> ' . print_r($error, true)); error_log("wp_next_scheduled ($index)-> " . print_r(wp_next_scheduled('nsm_test_cron', $args), true)); } } } ?> <div class="wrap"> <h2>My Custom Button</h2> <form action="" method="post"> <input type="hidden" name="action" value="submit_my_custom_form"> <?php wp_nonce_field('my_custom_form_nonce'); ?> <input type="text" name="my_custom_data" placeholder="Enter some data"> <input type="hidden" name="action" value="myaction"> <input type="submit" class="button button-primary" value="Submit"> </form> </div> <?php } public function nsm_test_cron($args) { $error = wp_clear_scheduled_hook('nsm_test_cron', array($args)); error_log('nsm_test_cron -> ' . $args['tags']); sleep(1); delete_transient( 'doing_cron_' . $args['tags']); } } } new NSM_Test_Cron();
Change History (1)
Note: See
TracTickets for help on using
tickets.