/**
* Adds `rel="noopener"` to all HTML A elements that have a target.
*
* @since 5.1.0
* @since 5.6.0 Removed 'noreferrer' relationship.
*
* @param string $text Content that may contain HTML A elements.
* @return string Converted content.
*/
function wp_targeted_link_rel( $text ) { // Don't run (more 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( '|<a\s([^>]*target\s*=[^>]*)>|i', 'wp_targeted_link_rel_callback',
$part );
}