Объединить регулярные выражения для ссылки (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.

Как скомбинировать все эти регулярки в одной функции?


Ответы (0 шт):