Объединить регулярные выражения для ссылки (WordPress)
Есть функция для WordPress, которая извлекает ВНЕШНЮЮ ссылку внутри текста и добавляет новые атрибуты для открытия в новой вкладке.
add_filter('the_content', 'external_links');
function external_links($content) {
$regex = '/<a[^>]*href=["|\']([^"#|\']*)["|\'][^>]*>/i';
$content = preg_replace_callback($regex,
function($m) {
$site_link = get_bloginfo('url'); // URL домашнего сайта
// Если $site_link не входит в $1
if (strpos($m[1], $site_link) === false)
return '<a href="' . $m[1] . '" rel="noreferrer noopener" target="_blank" title="откроется в новой вкладке">'; // форматируем
else
return '' . $m[0] . ''; // оставляем как есть
},
$content);
return $content;
}
Эта функция полезна на случай, если какие-то ссылки в постах уже были ранее вручную отформатированы в редакторе и добавлены необходимые атрибуты. Но в конечном форматировании не хватает классов, которые могут присутствовать у ссылки и у меня есть цели Я.Метрики (атрибут onclick).
(!) Порядок атрибутов может быть разным.
Пример неформатированной ссылки со всеми возможными атрибутами:
<a onclick="ym(12345678,'reachGoal','mytarget'); return true;" rel="noreferrer noopener" href="https://docs.google.com/" target="_blank" class="myclass">текст ссылки</a>
Нашел такую регулярку для поиска атрибута с классами:
\s?class=["][^"]*"\s?
Нечто похожее д.б. и для onclick.
Как скомбинировать все эти регулярки в одной функции?