Шорткоды на регулярных выражениях

Часто на сайтах возникает необходимость вставлять в тексты страниц динамичные информационные блоки – баннеры, телефоны и т.д. Как правило, содержание этих блоков часто изменяется что существенно усложняет работу контент менеджера.

Упростить эту задачу помогут шорткоды (shortcode). Смысл их в том что в HTML-коде страницы вместо нужного контента вставляется символьный код, например [[phone]], а при выводе на фронте сайта он заменяется на нужную информацию.

Шорткод в визуальном редакторе

Двойные квадратные скобки используются для того чтобы исключить ложную замену.

Простой пример замены шоркодов на контент:

$text = '
	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
	[[phone]]
	<p>Sed porta justo sed nibh elementum condimentum.</p>
	[[address]]
';

$text = str_ireplace('[[phone]]', '+7 (495) 000-00-00', $text);
$text = str_ireplace('[[address]]', 'г.Москва, Тверская д.9', $text);
echo $text;
PHP

Результат:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
+7 (495) 000-00-00
<p>Sed porta justo sed nibh elementum condimentum.</p>
г.Москва, Тверская д.9

Шорткоды с контентом из массива

Данный функционал можно реализовать на регулярных выражениях, функцией preg_match_all().

$text = '
	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
	[[phone]]
	<p>Sed porta justo sed nibh elementum condimentum.</p>
	[[address]]
';

// Массив значений
$info = array(
	'phone'   => '+7 (495) 000-00-00',
	'address' => 'г.Москва, Тверская д.9',
);

// Поиск и замена
preg_match_all("|\[\[(.*)\]\]|U", $text, $matches);
if (!empty($matches[1])) {
	foreach ($matches[1] as $row) {
		$replase = (empty($info[$row])) ? '' : $info[$row];
		$text = str_ireplace('[[' . $row . ']]', $replase, $text);
	}
}

echo $text;
PHP

Результат:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
+7 (495) 000-00-00
<p>Sed porta justo sed nibh elementum condimentum.</p>
г.Москва, Тверская д.9
17.03.2018, обновлено 09.06.2021
3111
Предыдущая запись PHP parse_url и её обратная функция
Следующая запись RSS канал на PHP

Комментарии

, чтобы добавить комментарий.

Другие публикации

Регулярные выражения для замены на теги
Замена URL, e-mail и текста на HTML-теги по регулярному выражению PHP.
1923
+1
Класс обертка для PDO
Класс значительно упрощает работу с PDO, сокращает код. Реализован на статических классах и не требует создание экземпляра класса.
14381
+7
Примеры использования PDO MySQL
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
57674
+1
Поиск похожих статей на PHP + MySQL
Один из вариантов поиска похожих статей в базе данных основан на схождении слов в двух текстах.
2374
+2
Счетчик просмотров страниц с графиком
Для примера возьмем статейный сайт, на нём нужно сделать счетчик просмотров статей, с выводом результатов за день,...
8432
+12
Постраничный вывод и базы данных
В SQL запросах, для ограничения количества строк в результате используется инструкция LIMIT, например следующий вернёт...
3847
+3