This article contains PHP code and is intended for developers. We offer this code as a courtesy, but don't provide support for code customizations or 3rd party development.
Use this hook to change the HTML for any fields in your form.
Usage
add_filter('frm_replace_shortcodes', 'frm_change_my_html', 10, 3); function frm_change_my_html($html, $field, $args)
Parameters
- $html (string)
- $field (array)
- 'id' (int)
- 'default_value' (string)
- 'type' (string)
- $args (array)
- 'errors' (array)
- 'form' (array)
Examples
Basic Usage
This example can be used to add text or HTML below each field in your form.
add_filter('frm_replace_shortcodes', 'frm_change_my_html', 10, 3);
function frm_change_my_html($html, $field, $args){
if($args['form']['id'] == 10){ //change 10 the id of the form to change
$html .= 'add additional content here ';
}
return $html;
}
Checkbox and Radio Button HTML
Use this example to take the radio or checkbox input OUT of the label tags. Please note: Conditional logic that uses radio or checkbox fields will NOT work when you use this code. You must use custom JavaScript to make other fields show or hide when a specific checkbox or radio button is selected.
add_filter( 'frm_replace_shortcodes', 'frm_change_my_html', 10, 3 );
function frm_change_my_html( $html, $field, $args ) {
if ( ! in_array ( $field['type'], array( 'radio', 'checkbox' ), true ) ) {
return $html;
}
$dom = new DOMDocument();
libxml_use_internal_errors( true );
$dom->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
libxml_clear_errors();
$xpath = new DOMXPath( $dom );
// Find all <label> elements that contain an <input>
$labels = $xpath->query( '//label[input]' );
foreach ( $labels as $label ) {
// Find the <input> element inside the <label>
$input = $label->getElementsByTagName('input')->item(0);
if ($input) {
// Clone the input element
$inputClone = $input->cloneNode(true);
// Remove the input from inside the label
$label->removeChild($input);
// Insert the input after the label
if ($label->nextSibling) {
$label->parentNode->insertBefore($inputClone, $label->nextSibling);
} else {
$label->parentNode->appendChild($inputClone);
}
}
}
return $dom->saveHTML();
}
Make this example specific to a field or fields by replacing this:
if ( in_array( $field['type'], array( 'checkbox', 'radio' ) ) ) {
with this:
if ( in_array( $field['id'], array( x, y, z ) ) ) {