Как заменить атрибут ‘alt’ для изображения, если оно пустое?

Я хочу заменить изображение alt тегами контента. Так что я использовал preg_replace

add_filter('the_content', 'click_to_expand_gallery');
function click_to_expand_gallery($content) {
$pattern ='~<a(.*?)href=(.*?)><img(.*?)alt="(.*?)"></a>~i';
$replacement = '<a$1href=$2><img$3alt="Game"></a>';
$content = preg_replace($pattern, $replacement, $content);
}

Работает нормально, но проблема в том, что этот код заменяет теги alt, если в нем уже есть данные.

Может кто-нибудь подсказать, пожалуйста, как проверить, является ли тег alt пустым или нет, а затем заменить его данными в соответствии с ним.

2

Решение

Соответствует полной строке, только когда alt имеет пустое значение. Захватите две части, которые остаются неизменными, и поместите их по обе стороны от значения по умолчанию «Игра» в $replacement:

Метод (демонстрация):

$pattern ='~(<a.*? href=[^>]*><img.*? alt=")("[^>]*></a>)~i';
$replacement = '$1Game$2';
$content = preg_replace($pattern, $replacement, $content);
echo $content;

Ввод, вывод:

$content='<a href="something.com"><img src="blah.jpg" alt=""></a>';
// output: <a href="something.com"><img src="blah.jpg" alt="Game"></a>

$content='<a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>';
// output: <a href="something.com"><img src="blah.jpg" alt="Not Empty"></a>

Образец Демо

Теперь это буквально соответствует <a> тег с атрибутом href, который также может иметь ноль или более других атрибутов, содержащих <img> тег, который должен иметь пустой alt атрибут и может иметь ноль или более других атрибутов.

Если вы не хотите проверить, что <img> тег вложен в тег привязки, тогда шаблон регулярного выражения можно уменьшить, чтобы он соответствовал только <img> часть.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector