## Функция SHORTCODE_UNAUTOP() │ WP 2.9.0
Функция предназначена для предотвращения автоматической вставки тегов <p>...</p> вокруг отдельных шорткодов.
### Как это работает?
При использовании шорткодов, которые стоят отдельно, функция shortcode_unautop не позволяет автоматической обработке содержимого, чтобы оно не оборачивалось в теги параграфов.
### Время выполнения
- Один раз — 0.000067 секунды (очень быстро)
- 50000 раз — 0.67 секунды (тоже быстро)
### Нет хуков
### Возвращаемое значение
Функция возвращает строку с отфильтрованным содержимым.
### Использование
```php
shortcode_unautop( $text );
- $text (строка) (обязательный) — содержимое, в котором будет обработан шорткод.
Примеры
Пример 1
Предположим, у нас зарегистрирован шорткод short. Тогда:
$str = '
[short id="54"]
Текст
[short id="54"]
Текст
[short id="54"]
Текст
[short id="54"] текст
Шорткод с содержимым
[short align="aligncenter" width="495"]любой текст внутри[/short]
';
echo shortcode_unautop( $str );
/* Выводим:
[short id="54"]
Текст
[short id="54"]
Текст
[short id="54"]
Текст
[short id="54"] текст
Текст
[short align="aligncenter" width="495"]любой текст внутри[/short]
*/
Пример 2
Другой пример того, как работает регулярное выражение в функции (зависит от зарегистрированных шорткодов) (WP версия 4.4):
(?:[rnt ]|xC2xA0| )*+([(embed|wp_caption|caption|gallery|playlist|audio|video|democracy|democracy_archives|download)(?![w-])[^]/]*(?:/(?!])[^]/]*)*?(?:/]|](?:[^[]*+(?:[(?!/])[^[]*+)*+[/])?))(?:[rnt ]|xC2xA0| )*+
Заметки
- Глобальная переменная:
$shortcode_tags— массив, содержащий зарегистрированные шорткоды.
История изменений
- Версия 2.9.0 — функция была введена.
Исходный код функции
function shortcode_unautop( $text ) {
global $shortcode_tags;
if ( empty( $shortcode_tags ) || ! is_array( $shortcode_tags ) ) {
return $text;
}
$tagregexp = implode( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) );
$spaces = wp_spaces_regexp();
$pattern =
'/'
. '' // Открывающий тег параграфа.
. '(?:' . $spaces . ')*+' // Необязательные пробелы в начале.
. '(' // 1: Шорткод.
. '[' // Открывающая скобка.
. "($tagregexp)" // 2: Имя шорткода.
. '(?![w-])' // Не может быть зашито слово или дефис.
. '[^]/]*' // Не закрывающая скобка или слэш.
. '(?:'
. '/(?!])' // Слэш, не за которым идет закрывающая скобка.
. '[^]/]*' // Не закрывающая скобка или слэш.
. ')*?'
. '(?:'
. '/]' // Самозакрывающийся тег и закрывающая скобка.
. '|'
. ']' // Закрывающая скобка.
. '(?:' // Необязательное содержимое между шорткодами.
. '[^[]*+' // Не открывающая скобка.
. '(?:'
. '[(?!/2])' // Открывающая скобка, не за которой следует закрывающий шорткод.
. '[^[]*+' // Не открывающая скобка.
. ')*+'
. '[/2]' // Закрывающий шорткод.
. ')?'
. ')'
. ')'
. '(?:' . $spaces . ')*+' // Необязательные пробелы в конце.
. '
' // Закрывающий тег параграфа.
. '/';
return preg_replace( $pattern, '$1', $text );
}