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. |