wpcf7_form_elements хук-фільтрCF7 1.0

Дозволяє змінити 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

Приклади

0

#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>
0

#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

Використання не знайдено.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *