wpcf7_form_elements
Дозволяє змінити html вміст шаблону листа, де теги листа вже перетворені.
Використання
add_filter( 'wpcf7_form_elements', 'wp_kama_wpcf7_form_elements_filter'); /** * Function for `wpcf7_form_elements` filter-hook. * * @param $replace_all_form_tags * * @return */ function wp_kama_wpcf7_form_elements_filter( $replace_all_form_tags ){ // Filter... return $replace_all_form_tags; }
- $replace_all_form_tags
- –
Приклади
#1 Приклад даних, що надходять у фільтр
add_filter( 'wpcf7_form_elements', function ( $html ) { print_r ($ html, true); return $html; } );
Шаблон листа:
<label> Your name [text* your-name] </label> <label> Your email [email* your-email] </label> <label> Тема [text* your-subject] </label> <label> Your message (optional) [textarea your-message]</label> [submit "Submit"]
Прийде у фільтр:
<p><label> Your name<br /> <span class="wpcf7-form-control-wrap your-name"><input type="text" name="your-name" value="" size="40" class="wpcf7-form-control wpcf7- text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" /></span> </label></p> <p><label> Your email<br /> <span class="wpcf7-form-control-wrap your-email"><input type="email" name="your-email" value="" size="40" class="wpcf7-form-control wpcf7- text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" aria-required="true" aria-invalid="false" /></span> </label></p> <p><label> Тема<br /> <span class="wpcf7-form-control-wrap your-subject"><input type="text" name="your-subject" value="" size="40" class="wpcf7-form-control wpcf7- text wpcf7-validates-as-required" aria-required="true" aria-invalid="false" /></span> </label></p> <p><label> Your message (optional)<br /> <span class="wpcf7-form-control-wrap your-message"><textarea name="your-message" cols="40" rows="10" class="wpcf7-form-control wpcf7-textarea" aria- invalid="false"></textarea></span> </label></p> <p><input type="submit" value="Submit" class="wpcf7-form-control wpcf7-submit" /></p>
#2 Замінимо <input type=”submit”> на <button type=”submit”> із збереженням усіх атрибутів
Іноді для кнопки відправки форми потрібно застосувати стилі за допомогою псевдокласів before
і after
, але специфікація CSS цього зробити не дозволяє. Але якщо input
замінити на button
– завдання вирішиться.
Варіант з DOMDocument() та DOMXpath():
add_filter( 'wpcf7_form_elements', function ( $html ) { // Статус процесу - чи була зроблена заміна (поки що ні) $status = false; // Беремо наш швейцарський ніж по роботі з html $doc = новий DOMDocument(); // Конвертуємо контент з UTF-8 у HTML-ENTITIES, щоб бібліотека DOMDocument зробила все правильно $content = mb_convert_encoding( $html, 'HTML-ENTITIES', 'UTF-8'); // Створюємо із контенту спеціальний об'єкт, з яким можна працювати $doc->loadHTML($content); // Інструмент для роботи з Xpath $xpath = new DOMXpath($doc); /** * Знаходимо все input=submit * * @var DOMElement $input */ foreach ( $xpath->query( "//input[@type='submit']" ) as $input ) { if ( $input->hasAttribute( 'value' ) ) { // Створюємо елемент button $button = $doc->createElement( 'button', $input->getAttribute( 'value' ) ); /** * "Переносимо" всі атрибути від input до button * * @var DOMAttr */ foreach ( $input->attributes as $attr ) { $button->setAttribute( $attr->name, $attr->value ); } // Замінюємо input на свіжозгенерований button $input->parentNode->replaceChild( $button, $input ); // Змінюємо статус – заміна була! $status = true; } } // Якщо заміна була, то віддаємо новий контент if ($status) { return $doc->saveHtml(); } return $html; } );
Варіант із використання регулярних виразів
Цей варіант працює в 4 рази швидше (0.0001 с проти 0.0004 с). Як видно швидкості виконання коду настільки маленькі для такого маленького шматка HTML, що на це можна заплющити очі і робити як зручніше.
add_filter( 'wpcf7_form_elements', function ( $html ) { preg_match( '~<input([^>]+)type=["']submit["']([^>/]+)/?>~i', $html, $match ); if($match) { $ input = $ match [0]; $ attr = trim ($ match [1]. $ Match [2]); preg_match( '/value=["']([^"']+)/', $input, $mm ); $button_text = $mm[1]; $html = str_replace( $input, "<button $attr>$button_text</button>", $html ); } return $html; } );
Де викликається хук
wpcf7_form_elements
Де використовується хук в Contact Form 7
Використання не знайдено.