wp_targeted_link_rel() WP 5.1.0

Додає rel noopener до всіх тегів з атрибутом target у переданому тексті.

Працює супер швидко, якщо в тексті взагалі немає посилань – тега .

Працює на основі:
wp_targeted_link_rel_callback()
1 раз – 0.000249 сек
(швидко) | 50000 разів – 0.22 сек
(дуже швидко) |
PHP 7.2.16, WP 5.2

Хуків немає.

Повертає

Строку. Перетворений рядок.

Використання

wp_targeted_link_rel($text);
$text
(рядок) (обов’язковий)
Текст, в якому є елементи HTML A.

Приклади

0

#1 Демонстрація роботи

$text = 'Foo <a href="http://google.com" target="_blank">google</a> bar';

echo wp_targeted_link_rel($text);
//> Foo <a href="http://google.com" target="_blank" rel="noopener">google</a> bar

список змін

З версії 5.1.0Введено.
З версії 5.6.0Повернувся ‘noreferrer’ відносин.

Код wp_targeted_link_rel() WP 6.0.2

function wp_targeted_link_rel( $text ) {
	// Не можна йти (більше expensive) regex if no links with targets.
	if ( stripos( $text, 'target' ) === false || stripos( $text, '<a ' ) === false || is_serialized( $text ) ) {
		return $text;
	}

	$script_and_style_regex = '/<(script|style).*?</1>/si';

	preg_match_all($script_and_style_regex, $text, $matches);
	$ extra_parts = $ matches [0];
	$html_parts = preg_split($script_and_style_regex, $text);

	foreach ($html_parts as &$part) {
		$part = preg_replace_callback( '|<as([^>]*targets*=[^>]*)>|i', 'wp_targeted_link_rel_callback', $part );
	}

	$text = '';
	for ( $i = 0; $i < count( $html_parts ); $i++ ) {
		$text.=$html_parts[$i];
		if ( isset ( $ extra_parts [ $ i ] ) ) {
			$text.=$extra_parts[$i];
		}
	}

	return $text;
}

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

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