\WP_Stager_Integration\Event::update(array $event, int $post_id = 0): int

Description

Upserts an event CPT object into the database.

Updates the event CPT object if it already exists. Inserts it if it doesn't.

Parameters:

ParameterTypeDescription
$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

Fileclass-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!