Функция shortcode_parse_atts() в WordPress
Описание функции
Функция shortcode_parse_atts() используется для извлечения всех атрибутов из шорткодов в WordPress. Она возвращает массив, где ключами являются названия атрибутов, а значениями — их значения. Это упрощает работу с атрибутами, поскольку все атрибуты можно легко получить.
Применение
Функция использует get_shortcode_atts_regex() для обработки строк с атрибутами. Вызов функции занимает минимальное время: 0.000195 секунды при однократном выполнении и 0.07 секунды при выполнении 50,000 раз.
Возвращаемое значение
Функция возвращает массив, содержащий значения атрибутов, сгруппированные по названиям. Если атрибутов нет или строку с аргументами невозможно обработать, функция возвращает пустой массив.
Использование функции
Синтаксис
shortcode_parse_atts( $text );
- $text (string) (обязательный) — строка с аргументами шорткода.
Примеры использования
Пример 1: Простой разбор атрибутов
Предположим, у вас есть строка с шорткодом и его атрибутами:
$res = shortcode_parse_atts('module="WP" bar="" foo='bar' baz bax=');
print_r($res);
Вывод:
Array
(
[module] => WP
[bar] =>
[foo] => bar
[0] => baz
[1] => bax=
)
Пример 2: Извлечение атрибутов из строки с текстом
Вы можете использовать функцию для разбора атрибутов, находящихся внутри строк:
$str = <<<'STR'
Content
[five_element name="big badaboom" ident="multipassport" foo='bar']
More Content
STR;
// Проверка, зарегистрирован ли шорткод в WordPress
if( ! has_shortcode( $str, 'five_element' ) ){
echo 'Шорткод не найден';
}
preg_match('~[five_element(.+)]~s', $str, $mm);
$res = shortcode_parse_atts($mm[1]);
print_r($res);
Вывод:
Array
(
[name] => big badaboom
[ident] => multipassport
[foo] => bar
)
История изменений
- С версии 2.5.0: Функция была введена.
- С версии 6.5.0: Функция теперь всегда возвращает массив, даже если строку с аргументами невозможно разобрать или она пуста.
Реализация функции
Вот как выглядит код функции shortcode_parse_atts() в WordPress (версии 6.7.2):
function shortcode_parse_atts( $text ) {
$atts = array();
$pattern = get_shortcode_atts_regex();
$text = preg_replace("/[x{00a0}x{200b}]+/u", ' ', $text);
if (preg_match_all($pattern, $text, $match, PREG_SET_ORDER)) {
foreach ($match as $m) {
if (!empty($m[1])) {
$atts[strtolower($m[1])] = stripcslashes($m[2]);
} elseif (!empty($m[3])) {
$atts[strtolower($m[3])] = stripcslashes($m[4]);
} elseif (!empty($m[5])) {
$atts[strtolower($m[5])] = stripcslashes($m[6]);
} elseif (isset($m[7]) && strlen($m[7])) {
$atts[] = stripcslashes($m[7]);
} elseif (isset($m[8]) && strlen($m[8])) {
$atts[] = stripcslashes($m[8]);
} elseif (isset($m[9])) {
$atts[] = stripcslashes($m[9]);
}
}
// Отклоняем любые незакрытые HTML-элементы.
foreach ($atts as &$value) {
if (str_contains($value, '<')) {
if (1 !== preg_match('/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value)) {
$value = '';
}
}
}
}
return $atts;
}
Теперь вы знаете, как использовать функцию shortcode_parse_atts() в WordPress для извлечения атрибутов шорткодов. Эта информация поможет вам лучше работать с шорткодами и управлять свойствами вашего контента.