Yes, in functions.php
I’m not sure about extra field data:
add_action( 'notification/trigger/registered', function( $trigger ) { // Check if registered Trigger is the one we need. if ( $trigger->get_slug() != 'wordpress/booked_appointments/added' ) { return; } $trigger->add_merge_tag( new BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'booked_first_name', 'name' => __( 'Guest First Name', 'guardteam' ), 'resolver' => function( $trigger ) { return get_post_meta( $trigger->booked_appointments->ID, '_appointment_guest_name', true ); }, ) ) ); $trigger->add_merge_tag( new BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'booked_last_name', 'name' => __( 'Guest Last Name', 'guardteam' ), 'resolver' => function( $trigger ) { return get_post_meta( $trigger->booked_appointments->ID, '_appointment_guest_surname', true ); }, ) ) ); $trigger->add_merge_tag( new BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'booked_email', 'name' => __( 'Guest Email', 'guardteam' ), 'resolver' => function( $trigger ) { return get_post_meta( $trigger->booked_appointments->ID, '_appointment_guest_email', true ); }, ) ) ); $trigger->add_merge_tag( new BracketSpace\Notification\Defaults\MergeTag\StringTag( array( 'slug' => 'booked_custom_select', 'name' => __( 'Custom Field', 'guardteam' ), 'resolver' => function( $trigger ) { return get_post_meta( $trigger->booked_appointments->ID, '_cf_meta_value', true ); }, ) ) ); }, 10, 2 );