eventsmanager icon

Custom em_booking_validate for dependent_events

eventsmanager | PRO | 09/25/26 04:41:58 PM UTC | -2 ⭐ | 21238 👁️ | Never ⏰ | []
text |

1.15 KB

|

None

|

0 👍

/

2 👎

<?php
 add_filter( 'em_booking_validate', 'custom_em_booking_validate', 10, 2 );
 function custom_em_booking_validate( $result, $EM_Booking ) {
 	$EM_Event = $EM_Booking->get_event();
 	if ( empty( $EM_Event->event_attributes['dependent_event'] ) ) {
		return $result;
	}
 	// Example:
	// 1,2,3
	$dependent_events = preg_split(
		'/\s*,\s*/',
		$EM_Event->event_attributes['dependent_event']
	);
 	$has_booked_parent_event = false;
	$error_event = null;
 	foreach ( $dependent_events as $event_id ) {
 		$event_id = absint( trim( $event_id ) );
 		if ( ! $event_id ) {
			continue;
		}
 		$parent_event = em_get_event( $event_id );
 		if ( empty( $parent_event->event_id ) ) {
			continue;
		}
 		if ( ! $error_event ) {
			$error_event = $parent_event;
		}
 		// OR logic.
		if ( static::has_booked( $parent_event ) ) {
			$has_booked_parent_event = true;
			break;
		}
	}
 	// None of the dependent events were booked.
	if ( ! $has_booked_parent_event ) {
 		if ( $error_event ) {
			$error = static::get_error_message( $error_event );
			$EM_Booking->add_error( $error );
		}
 		$result = false;
	}
 	return $result;
}

Comments