Okay
  Print

Adding custom fields to the RSVP form code example

Here's example on how to insert custom fields to the RSVP form. 

The code should be inserted in your theme or child-theme functions.php file.

/**
 * This code adds two custom fields (text input and select element) on the front-end modal window
 */
add_action('wp_footer', function() {
    ?>
    <script type="text/javascript">
        (function ($) {
            $(document).on('stecOnRsvpAfterFields', function (e, data) {
                var customHtml = [
                    '<input type="text" name="attendee_country" placeholder="Country" />',
                    '<select name="attendee_tag"><option value="1">Tag</option></select>'
                ];
                data.temp.customFields = customHtml;
            });
        })(window.jQuery);
    </script>
    <?php
});
/**
 * This code intercepts the custom fields when the form is submitted
 * \Stachethemes\Stec\Admin_Helper::post is same as $_POST[...] but returns default value (false) if !isset
 */
add_filter('stec_rsvp_to_event_before_add', function(\Stachethemes\Stec\Event_Meta_Attendee $attendee) {
    
    $country = \Stachethemes\Stec\Admin_Helper::post('attendee_country', false);
    $tag     = \Stachethemes\Stec\Admin_Helper::post('attendee_tag', false);
    if ($country && $tag) {
        $attendee->set_custom_data('country', $country);
        $attendee->set_custom_data('tag', $tag);
    }
    return $attendee;
});
/**
 * This code will display the customs fields in the admin area 
 * When clicking on attendee edit button
 */
add_action('admin_footer', function() {
    ?>
    <script type="text/javascript">
        (function ($) {
            $(document).on('stecOnAdminAddAttendee', function (e, data) {
                var attendeeIndex = data.$attendee.index('.stachethemes-admin-attendance-list-attendee');
                $.each(data.attendee.custom, function (key) {
                    var customHTML = [];
                    var inputKeyName = 'attendee[' + attendeeIndex + '][custom][' + key + ']';
                    customHTML.push('<p class="stachethemes-admin-info">' + key + '</p>');
                    customHTML.push('<input class="stachethemes-admin-input" type="text" name="' + inputKeyName + '" value="' + this + '" />');
                    $(customHTML.join('')).insertBefore(data.$attendee.find('.edit a[data-action="update-attendee"]'));
                });
            });
        })(window.jQuery);
    </script>
    <?php
});