[wp-trac] [WordPress Trac] #60657: wp_schedule_event problem

WordPress Trac noreply at wordpress.org
Thu Feb 29 08:44:33 UTC 2024


#60657: wp_schedule_event problem
--------------------------+-----------------------------
 Reporter:  odoremieux    |      Owner:  (none)
     Type:  defect (bug)  |     Status:  new
 Priority:  normal        |  Milestone:  Awaiting Review
Component:  General       |    Version:  6.4.3
 Severity:  normal        |   Keywords:
  Focuses:                |
--------------------------+-----------------------------
 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 at 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();

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/60657>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list