\WP_Stager_Integration\Event::update(array $event, int $post_id = 0): int
\WP_Stager_Integration\Event::update(array $event, int $post_id = 0): intDescription
Upserts an event CPT object into the database.
Updates the event CPT object if it already exists. Inserts it if it doesn't.
Parameters:
| Parameter | Type | Description |
|---|---|---|
$event | array | An array of raw Stager event data. |
$post_id | int | (Optional) A post ID to update. |
Returns:
int The post ID of the event CPT object, or 0 if the event is stale and was deleted or if an error occurred.
Information
| File | class-event.php line 918 |
|---|
Full Code
/**
* Upserts an event CPT object into the database.
*
* Updates the event CPT object if it already exists. Inserts it if it doesn't.
*
* @param array $event An array of raw Stager event data.
* @param int $post_id (Optional) A post ID to update.
*
* @return int The post ID of the event CPT object, or 0 if the event is stale and was deleted or if an error occurred.
*/
public static function update( $event, $post_id = 0 ) {
// Type casting
$event = (array) $event;
$post_id = (int) $post_id;
// Get data
$event_id = (int) ($event[ 'id' ] ?? 0);
$event_last_updated_datetime = (string) ($event[ 'updatedAt' ] ?? '');
$event_program_end = (string) ($event[ 'programEndAt' ] ?? '');
$event_program_end_timestamp = (int) strtotime( $event_program_end );
$event_deletion_days = (int) Options::get_stale_event_retention_days();
$event_deletion_cutoff = (int) time() - ($event_deletion_days * DAY_IN_SECONDS);
// Delete post if event is stale
if ( $event_deletion_days && $post_id && $event_program_end_timestamp < $event_deletion_cutoff ) {
wp_delete_post( $post_id, true );
return 0;
}
// Check of we have a post ID and event last updated datetime
if ( $post_id && $event_last_updated_datetime ) {
// Get post last updated timestamp in UTC
$post_last_updated = (int) (get_post_modified_time( 'U', true, $post_id ) ?: 0);
// Convert event datetime to UTC timestamp for proper comparison
try {
$event_last_updated_datetime = \WP_Stager_Integration\Utility::normalize_datetime_string( $event_last_updated_datetime );
$event_datetime = new \DateTime( $event_last_updated_datetime );
$event_datetime->setTimezone( new \DateTimeZone( 'UTC' ) );
$event_last_updated = (int) $event_datetime->getTimestamp();
} catch ( \Exception $e ) {
// Fallback to current time if DateTime parsing fails
$event_last_updated = (int) time();
}
// Bail if post is already up to date
if ( $post_last_updated > $event_last_updated ) {
return;
}
}
// Get data
$event_name = (string) ($event[ 'name' ] ?? '');
$start_datetime = (string) ($event[ 'programStartAt' ] ?? '');
$end_datetime = (string) ($event[ 'programEndAt' ] ?? '');
$base_slug = (string) sanitize_title( $event_name );
$event_slug = self::get_unique_slug( $base_slug, $post_id );
$start_timestamp = $start_datetime ? (int) strtotime( $start_datetime ) : 0;
$end_timestamp = $end_datetime ? (int) strtotime( $end_datetime ) : 0;
// Init
$args = array(
'post_title' => $event_name,
'post_type' => self::CPT_SLUG,
'post_name' => $event_id,
'post_status' => 'publish',
'meta_input' => array(
self::get_meta_key( 'id' ) => $event_id,
self::get_meta_key( self::META_KEY_RAW_DATA ) => $event,
self::get_meta_key( self::META_KEY_TIMESTAMP_PROGRAM_START ) => $start_timestamp,
self::get_meta_key( self::META_KEY_TIMESTAMP_PROGRAM_END ) => $end_timestamp,
self::get_meta_key( self::META_KEY_SLUG ) => $base_slug,
self::get_meta_key( self::META_KEY_SLUG_UNIQUE ) => $event_slug,
),
);
if ( $post_id ) {
// Add post ID if a synced post already exists
$args[ 'ID' ] = $post_id;
}
return wp_insert_post( $args );
}💡 If you ever get stuck or have a question, please check our FAQs, our Free Integration Service, our paid Full Integration Service, or reach out to us!

Get WP Stager Integration
🎁 Limited offer: Use code WELCOME26 to get your first month for free!

