Tribe__Events__API::saveEventMeta( int $event_id, array $data, WP_Post $event = null )
Used by createEvent and updateEvent – saves all the various event meta
Contents
Parameters
- $event_id
-
(int) (Required) The event ID we are modifying meta for.
- $data
-
(array) (Required) The meta fields we want saved.
- $event
-
(WP_Post) (Optional) The event post, itself.
Default value: null
Return
(bool)
Source
File: src/Tribe/API.php
public static function saveEventMeta( $event_id, $data, $event = null ) {
$tec = Tribe__Events__Main::instance();
$raw_data = $data;
$data = self::prepare_event_date_meta( $event_id, $data );
if ( is_wp_error( $data ) ) {
/**
* Hook fired when saving or updating event meta fields failed due to detection of invalid data.
*
* Example of invalid data is an EventStartMinute of `60`, since it should be 0-59.
*
* @param int $event_id The event ID we are modifying meta for.
* @param array $raw_data The meta fields we tried to send.
* @param WP_Post $event The event itself.
*
* @since 4.6.20
*/
do_action( 'tribe_events_event_save_failed_invalid_meta', $event_id, $raw_data, $event );
return false;
}
if ( empty( $data['EventHideFromUpcoming'] ) ) {
delete_metadata( 'post', $event_id, '_EventHideFromUpcoming' );
}
update_metadata( 'post', $event_id, '_EventShowMapLink', isset( $data['venue']['EventShowMapLink'] ) );
update_metadata( 'post', $event_id, '_EventShowMap', isset( $data['venue']['EventShowMap'] ) );
if ( isset( $data['post_status'] ) ) {
$post_status = $data['post_status'];
} else {
$post_status = get_post_status( $event_id );
}
// Handle the submission of linked post type posts (like venue and organizer)
Tribe__Events__Linked_Posts::instance()->handle_submission( $event_id, $data );
// Ordinarily there is a single cost value for each event, but addons (ie, ticketing plugins) may need
// to record a number of different price points for the same event
$event_cost = isset( $data['EventCost'] ) ? (array) $data['EventCost'] : array();
$data['EventCost'] = (array) apply_filters( 'tribe_events_event_costs', $event_cost, $event_id );
// If we are saving just one meta, we reset to avoid deleting and re-adding cost every time
if ( is_array( $data['EventCost'] ) && 1 === count( $data['EventCost'] ) ) {
$data['EventCost'] = reset( $data['EventCost'] );
}
if ( isset( $data['FeaturedImage'] ) && ! empty( $data['FeaturedImage'] ) ) {
update_metadata( 'post', $event_id, '_thumbnail_id', $data['FeaturedImage'] );
unset( $data['FeaturedImage'] );
}
if ( isset( $data['EventAllDay'] ) && 'yes' === $data['EventAllDay'] ) {
$data['EventDuration'] = null;
}
/**
* Allow hooking in prior to updating meta fields.
*
* @param int $event_id The event ID we are modifying meta for.
* @param array $data The meta fields we want saved.
* @param WP_Post $event The event itself.
*
* @since 4.6
*/
do_action( 'tribe_events_event_save', $event_id, $data, $event );
//update meta fields
foreach ( $tec->metaTags as $tag ) {
$htmlElement = ltrim( $tag, '_' );
if ( isset( $data[ $htmlElement ] ) && $tag != Tribe__Events__Main::EVENTSERROROPT ) {
if ( is_string( $data[ $htmlElement ] ) ) {
$data[ $htmlElement ] = filter_var( $data[ $htmlElement ], FILTER_SANITIZE_STRING );
}
// Fields with multiple values per key
if ( is_array( $data[ $htmlElement ] ) ) {
delete_metadata( 'post', $event_id, $tag );
foreach ( $data[ $htmlElement ] as $value ) {
add_metadata( 'post', $event_id, $tag, $value );
}
}
// Fields with a single value per key
else {
update_metadata( 'post', $event_id, $tag, $data[ $htmlElement ] );
}
}
}
// Set sticky state for calendar view.
if ( $event instanceof WP_Post ) {
if ( isset( $data['EventShowInCalendar'] ) && $data['EventShowInCalendar'] == 'yes' && $event->menu_order != '-1' ) {
$update_event = array(
'ID' => $event_id,
'menu_order' => '-1',
);
wp_update_post( $update_event );
} elseif ( ( ! isset( $data['EventShowInCalendar'] ) || $data['EventShowInCalendar'] != 'yes' ) && $event->menu_order == '-1' ) {
$update_event = array(
'ID' => $event_id,
'menu_order' => '0',
);
wp_update_post( $update_event );
}
}
// Set featured status
empty( $data['feature_event'] )
? tribe( 'tec.featured_events' )->unfeature( $event_id )
: tribe( 'tec.featured_events' )->feature( $event_id );
/**
* Allow hooking in after all event meta has been saved.
*
* @param int $event_id The event ID we are modifying meta for.
* @param array $data The meta fields we want saved.
* @param WP_Post $event The event itself.
*
* @since 4.6
*/
do_action( 'tribe_events_update_meta', $event_id, $data, $event );
return true;
}