Функция GET_SHORTCODE_REGEX() в WordPress
Функция GET_SHORTCODE_REGEX() используется для получения регулярного выражения, которое помогает в поиске шорткодов (shortcodes) в контенте. Это регулярное выражение объединяет теги шорткодов и содержит несколько подшаблонов для облегчения обработки.
Подробности о регулярном выражении
Регулярное выражение содержит 6 различных подшаблонов, которые помогают распарсить (разобрать) шорткоды:
- Дополнительная открывающая квадратная скобка
[— позволяет экранировать (избегать обработки) шорткоды, используя двойные квадратные скобки[[. - Имя шорткода — это название шорткода, который вы создаете.
- Список аргументов шорткода — это параметры, которые могут передаваться вашему шорткоду.
- Самозакрывающийся тег
/— используется для закрытия шорткода без контента. - Содержимое шорткода — это текст или HTML-код, который находится между открывающим и закрывающим шорткодами.
- Дополнительная закрывающая квадратная скобка
]— также позволяет экранировать шорткоды с двойными квадратными скобками.
Использование функции
Эта функция используется в нескольких других функциях, таких как:
apply_shortcodes()get_post_galleries()do_shortcode()
Зачем это нужно?
Функция работает очень быстро:
- За 1 раз — 0.000015 сек (очень быстро).
- За 50000 раз — 0.07 сек (выросла скорость).
Возвращаемое значение
Функция возвращает строку — регулярное выражение для поиска шорткодов.
Пример использования функции
Основной синтаксис
get_shortcode_regex( $tagnames );
- $tagnames (массив) — Список шорткодов для поиска.
- По умолчанию: все зарегистрированные шорткоды.
Примеры
Пример 1: Получение регулярного выражения шорткодом
echo get_shortcode_regex();
На выходе будет что-то подобное:
[([?)(embed|wp_caption|caption|gallery|playlist|audio|video)(?![w-])...(]?)
Если использовать параметр $tagnames:
echo get_shortcode_regex(array('mytag'));
На выходе:
[([?)(mytag)(?![w-])...
Пример 2: Проверка на наличие конкретного шорткода в записи
Давайте проверим, есть ли ваш шорткод в тексте и сделаем какое-либо действие, если он есть (например, подключим CSS-стили или JavaScript-файл):
add_action('wp', 'your_prefix_detect_shortcode');
function your_prefix_detect_shortcode() {
global $post;
$pattern = get_shortcode_regex();
if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches)
&& array_key_exists(2, $matches)
&& in_array('your-shortcode', $matches[2])) {
// Подключить css и js
}
}
Этот пример будет работать, если глобальная переменная $post определена.
Пример 3: Проверка на наличие шорткодов в нескольких записях
Этот пример похож на предыдущий, но позволяет проверить все записи текущего запроса (например, на странице категории):
add_action('wp', 'your_prefix_detect_shortcode');
function your_prefix_detect_shortcode() {
global $wp_query;
$posts = $wp_query->posts;
$pattern = get_shortcode_regex();
foreach ($posts as $post) {
if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches)
&& array_key_exists(2, $matches)
&& in_array('videoannotation', $matches[2])) {
// Подключить css и js
break; // Мы определили, что надо подключить стили и т.д.
}
}
}
Заметки
- Глобальный массив:
$shortcode_tags
Изменения в функции
- С версии 2.5.0 — введена функция.
- С версии 4.4.0 — добавлен параметр
$tagnames.
Связанные функции
add_shortcode()apply_shortcodes()do_shortcode()gallery_shortcode()has_shortcode()remove_all_shortcodes()remove_shortcode()shortcode_atts()shortcode_exists()shortcode_parse_atts()strip_shortcodes()wp_audio_shortcode()wp_playlist_shortcode()wp_video_shortcode()
Таким образом, функция GET_SHORTCODE_REGEX() является мощным инструментом для работы со шорткодами в WordPress и позволяет легко находить и обрабатывать их в контенте.