Я хочу создать очень простое решение для шорткода на простом веб-сайте, отличном от WordPress, который я поддерживаю, чтобы пользователи могли вводить контент, который будет извлекаться из базы данных и отображаться на экране, позволяя им создавать кнопки href.
Я видел различные классы для этого, но хочу сделать это всего одной или двумя строками кода, если это возможно.
Только они войдут через шорткод в таком формате:
[BUTTON link="www.test.com" label="Нажмите здесь"]
Пока у меня есть это, которое не извлекает атрибуты должным образом:
$copy=preg_replace('/\[(BUTTON )(.*?)\]/', '<a href = "$2">$1</a>', $copy);
Кто-нибудь может посоветовать?
может быть, проверить, как WordPress это реализовал?
https://github.com/WordPress/wordpress-develop/blob/6.0.2/src/wp-includes/shortcodes.php
и если приведенная выше ссылка не работает, проверьте ядро WordPress, как они реализовали функциональность короткого кода на GitHub.
Если эта ссылка изменится / умрет, то ваш ответ бесполезен. Вот почему Stack Overflow никогда не хочет получать ответы только по ссылкам.
Я предполагаю, что вы на самом деле хотите захватить не КНОПКУ, а ссылку и метку.
Код: (Демо)
echo preg_replace(
'/\[button link = "([^"]+)" label = "([^"]+)"]/i',
'<a href = "$1">$2</a>',
$text
);
Это потрясающе, спасибо @mickmackusa. Единственное, что мне интересно, легко ли сделать так, чтобы порядок указанных атрибутов мог быть любым? В настоящее время это должна быть ссылка, а затем метка.
Конечно выполнимо, но я рекомендую настаивать на строгом форматировании. Я бы, наверное, использовал preg_replace_callback()
с условием и еще несколькими группами захвата.
Я бы использовал
preg_replace_callback
с простым регулярным выражением, чтобы сопоставить весь шорткод (со всеми атрибутами в одной группе захвата) и выполнить синтаксический анализ атрибутов в отдельной функции с чем-то вроде токенизатора.