Функция shortcode_unautop() в WordPress 2.9.0

## Функция 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 ); }

Leave a Reply

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