ACF field group not found.
';
}
ob_start();
?>
]*>.*?\[acf-group:group_[A-Za-z0-9]+\].*?~is',
'',
$html,
1
);
return '' . $html . '
';
}
/**
* Store submitted ACF values in Events Manager booking metadata.
*/
function my_emp_store_acf_booking_values( $booking ) {
if (
empty( $_POST['my_emp_acf_groups'] ) ||
empty( $_POST['acf'] ) ||
! is_array( $_POST['acf'] )
) {
return;
}
$posted_acf = wp_unslash( $_POST['acf'] );
$groups = array_unique( (array) wp_unslash( $_POST['my_emp_acf_groups'] ) );
$saved = array();
foreach ( $groups as $group_key ) {
if ( ! preg_match( '/^group_[A-Za-z0-9]+$/', $group_key ) ) {
continue;
}
$fields = acf_get_fields( $group_key );
if ( empty( $fields ) ) {
continue;
}
foreach ( $fields as $acf_field ) {
if ( array_key_exists( $acf_field['key'], $posted_acf ) ) {
$saved[ $group_key ][ $acf_field['key'] ] = $posted_acf[ $acf_field['key'] ];
}
}
}
if ( $saved ) {
$booking->booking_meta['booking']['acf'] = $saved;
}
}
/* Standard single-event bookings. */
add_filter( 'em_booking_get_post', function( $result, $EM_Booking ) {
my_emp_store_acf_booking_values( $EM_Booking );
return $result;
}, 20, 2 );
/* Multiple Bookings checkout. */
add_filter( 'em_multiple_booking_get_post', function( $result, $EM_Multiple_Booking ) {
my_emp_store_acf_booking_values( $EM_Multiple_Booking );
return $result;
}, 20, 2 );
/**
* Replace the default Booking Details rows with Comment + stored ACF values.
*/
add_action( 'em_bookings_single_custom', 'my_emp_show_acf_on_booking_edit_screen', 10, 1 );
function my_emp_show_acf_on_booking_edit_screen( $EM_Booking ) {
$groups = $EM_Booking->booking_meta['booking']['acf'] ?? array();
if ( empty( $groups ) || ! is_array( $groups ) || ! function_exists( 'acf_get_fields' ) ) {
return;
}
foreach ( $groups as $group_key => $values ) {
$fields = acf_get_fields( $group_key );
if ( empty( $fields ) || ! is_array( $values ) ) {
continue;
}
foreach ( $fields as $acf_field ) {
if ( ! array_key_exists( $acf_field['key'], $values ) ) {
continue;
}
$raw_value = $values[ $acf_field['key'] ];
$formatted_value = function_exists( 'acf_format_value' )
? acf_format_value( $raw_value, 0, $acf_field )
: $raw_value;
?>
|
|
post_title ) ) {
return esc_html( $value->post_title );
}
return esc_html( wp_json_encode( $value ) );
}
if ( is_array( $value ) ) {
$items = array();
foreach ( $value as $item ) {
$items[] = my_emp_acf_booking_value_html( $item );
}
return implode( ', ', $items );
}
return nl2br( esc_html( (string) $value ) );
}