• Resolved daymobrew

    (@daymobrew)


    I have a wp-cron job that runs each night, to delete past events.
    It does not delete recurring events.
    It calls EM_Events::get() and then goes through the returned list can calls $event->delete().

    Unfortunately the deleting part frequently stops working i.e. events after a certain date will not be deleted. It seems like there must be a problem on a certain event and then trying to delete events later in the list does not work.

    I tried collecting all the IDs of the events to be deleted in an array and then calling:
    EM_Events::delete($array_of_past_event_ids)
    but that did not delete anything.

    I am comfortable digging into the EM code so I am happy to try to any suggestions people may have.

    Extract of the code is below:

    <?php
      // See: https://wp-events-plugin.com/documentation/event-search-attributes/
      $past_events = EM_Events::get(array('scope'=>'past','orderby'=>'event_start_date'));
      foreach ($past_events as $event) {
          $recurring = $event->recurrence_id? 'Yes' : '';
          $location = new EM_Location($event->location_id);
    
          $event_info = sprintf('<li>%s at %s on %s</li>%s', $event->event_name, $location->location_name, $event->event_start_date, "\n");
    
          // Add to appropriate list depending on whether the event is a recurring one.
          if (!$event->recurrence_id) {
      $deleted_events_list .= $event_info;
      $events_to_delete_array[] = $event->post_id;  // Add this event to the list to be deleted.
      $count++;
    
      $event->delete();  // Delete single event (because EM_Events::delete($events_to_delete_array) is not working.
      // or
      //EM_Events::delete(array($event->post_id));
          }
    
          unset($location);
      }
    ?>

    https://www.ads-software.com/plugins/events-manager/

Viewing 6 replies - 1 through 6 (of 6 total)
  • If you call the script directly, do you see any error messages?

    Thread Starter daymobrew

    (@daymobrew)

    I invoked it via a shortcode (that is how I get the cron job to run).
    wp-config.php has:

    define('WP_DEBUG', true);
    define('WP_DEBUG_DISPLAY', false);
    define('WP_DEBUG_LOG', true);

    Nothing in the debug log file.

    Plugin Support angelo_nwl

    (@angelo_nwl)

    maybe you can try to print variable $past_events if it contains any event to delete ?

    Thread Starter daymobrew

    (@daymobrew)

    @angelo: I manually deleted the past events before seeing your post.

    This morning I created an event with a date in the past.
    I updated my code to display $past_events:
    $output .= '<pre>'.var_export($past_events, true).'</pre>';

    It displayed the newly added event and all the recurring events.
    It displayed a massive amount of info about each event, beginning like:

    array (
      0 =>
      EM_Event::__set_state(array(
         'event_id' => '234',
         'post_id' => 1054,
         'event_slug' => 'learn-an-irish-jig-ceili-mor-2015-01-03',
         'event_owner' => '2',
         'event_name' => 'Learn An Irish Jig - Ceili Mor',
         'event_start_time' => '18:30:00',
         'event_end_time' => '20:30:00',
         'event_all_day' => '0',
         'event_start_date' => '2015-01-03',
         'event_end_date' => '2015-01-03',
         'post_content' => '',
         'event_rsvp' => '0',
         'event_rsvp_date' => '2015-01-03',
         'event_rsvp_time' => '18:30:00',
    
    -snip-
    Much, much more removed.

    Plugin Support angelo_nwl

    (@angelo_nwl)

    hmm, I’m afraid that we are quite limited with regards to custom coding as per the support policy – https://eventsmanagerpro.com/support-policy/

    however maybe you can try to add search attribute 'order' => 'DESC' or 'order' => 'ASC'

    Thread Starter daymobrew

    (@daymobrew)

    The support policy makes sense.

    I will continue debugging it.

Viewing 6 replies - 1 through 6 (of 6 total)
  • The topic ‘Automating deleting old events – works sometimes’ is closed to new replies.