Я хочу заменить изображение 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 пустым или нет, а затем заменить его данными в соответствии с ним.
Соответствует полной строке, только когда 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>
часть.
Других решений пока нет …