Italian (Italy)
Knowledge Base  >  Vik Appointments  >  Hook  >  Campi  >  Render Rule

apply_filters_ref_array( 'vikappointments_render_custom_field_rule', string $html, mixed $field, array &$data )

Fires before rendering a custom field.


Description

Trigger hook to allow external plugins to manipulate the data to display or the type of layout to render.

In case one of the attached plugins returned a non-empty string, then the field will use it as HTML in place of the default layout.

It is possible to access the rule of the field with $field->get('rule').


Parameters

$html

(string)  The new layout of the field. Do not return anything to keep using the layout defined by the field.

$field

(VAPCustomField)  The custom field instance.

&$data

(array)  An associative array of display data.


Example

The example below displays a dropdown of countries for those fields that picked our new "Country" rule.

/**
 * Trigger hook to allow external plugins to manipulate the data to
 * display or the type of layout to render. In case one of the attached
 * plugins returned a string, then the field will use it as HTML in
 * place of the default layout.
 *
 * @param  string  $html   The new layout of the field. Do not return anything
 *                         to keep using the layout defined by the field.
 * @param  mixed   $field  The custom field instance.
 * @param  array   &$data  An array of display data.
 */
add_filter('vikappointments_render_custom_field_rule', function($html, $field, &$data)
{
    // make sure we are rendering a field with "country" rule
    if ($field->get('rule') !== 'country')
    {
        // different rule, do nothing
        return $html;
    }

    // get list of supported countries
    $countries = JHtml::_('vaphtml.countries.getlist', $order = 'country_name');

    // build options
    $options = JHtml::_('select.options', $countries, 'code2', 'name', $data['value']);

    // add a placeholder at the beginning
    $options = "<option></option>\n" . $options;

    // build dropdown HTML
    $html .= sprintf(
        '<select name="%s" id="%s" class="%s">%s</select>',
        $data['name'],
        $data['id'],
        $data['class'],
        $options
    );

    return $html;
}, 10, 3);

Example #2

The example below explains how to extend the form validation via javascript for a field assigned to a specific rule.

add_filter('vikappointments_render_custom_field_rule', function($html, $field, &$data)
{
    // make sure we are rendering a field with "ticket" rule
    if ($field->get('rule') !== 'ticket')
    {
        // different rule, do nothing
        return $html;
    }

    // register validation script for the front-end only
    add_action('wp_print_footer_scripts', function() use ($data)
    {
        ?>
<script>
(function($) {
    'use strict';

    onInstanceReady(() => {
        // wait until the custom fields validator is ready
        if (typeof vapCustomFieldsValidator === 'undefined') {
            return false;
        }

        return vapCustomFieldsValidator;
    }).then((form) => {
        // register a new validation callback at runtime
        form.addCallback(() => {
            // take our ticket field by ID
            const field = $('#<?php echo $data['id']; ?>');

            // make sure the specified ticket is well-formed (to be adjusted according to your needs)
            if (field.val().match(/regex_goes_here/)) {
                // field valid, unset the invalid status previously set (if any)
                form.unsetInvalid(field);
                return true;
            }

            // field invalid
            form.setInvalid(field);
            // display further information to the user
            alert('The specified ticket does not seem to be valid.');
            return false;
        });
    });
})(jQuery);
</script>
        <?php
    });

    return $html;
}, 10, 3);

Changelog

Version Description
1.2 Introduced.
Ultimo aggiornamento: 2023-12-15
Utile?
100% delle persone lo ha trovato utile.
Potrebbe interessarti:

Questo sito web utilizza i cookie

Questo sito web utilizza cookie e tecnologie simili. Alcune di queste tecnologie sono necessarie per il corretto funzionamento del sito web (essenziali). Altre tecnologie sono utilizzate per valutare il comportamento degli utenti (analisi), per integrare media esterni o per scopi pubblicitari. Se l'utente accetta, queste tecnologie vengono attivate. I dettagli sono riportati nella Privacy Policy. Da questa stessa pagina è inoltre possibile aggiornare/revocare il consenso. Se non si fornisce il consenso, verranno attivati solo i cookie con funzioni essenziali.

Sul nostro sito web utilizziamo tecnologie provenienti dagli Stati Uniti. Pertanto, se acconsentite, acconsentite anche al trasferimento dei vostri dati negli Stati Uniti. Desideriamo sottolineare che gli Stati Uniti non hanno un livello di protezione dei dati paragonabile a quello dell'Unione Europea e che qualsiasi azienda statunitense può essere obbligata dalle autorità statali a consegnare i vostri dati senza che voi abbiate alcuno strumento efficace di protezione legale contro questo.