Функция shortcode_parse_atts() в WordPress: основные принципы работы

Функция 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 для извлечения атрибутов шорткодов. Эта информация поможет вам лучше работать с шорткодами и управлять свойствами вашего контента.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *