WordPress как на ладони
wordpress jino

shortcode_unautop() WP 2.9.0

Удаляет оборачивающий тег <p>...</p>, если в нем расположен только шорткод.

✈ 1 раз = 0.000067с = очень быстро | 50000 раз = 0.67с = очень быстро

Хуков нет.

Возвращает

Строку. Измененную строку.

Использование

shortcode_unautop( $pee );
$pee(строка) (обязательный)
Текст, который нужно отформатировать.

Примеры

#1 Демонстрация работы

Допустим у нас зарегистрирован шорткод short. Тогда:

$str = '
<p>[short id="54"]</p>

текст

[short id="54"]

текст

<p>
[short id="54"]
</p>

текст

<p>[short id="54"] текст</p>

Шорткод с содержанием

<p>[short align="aligncenter" width="495"]любой текст внутри[/short]</p>
';

echo shortcode_unautop( $str );

/* Получим:
[short id="54"]

текст

[short id="54"]

текст

[short id="54"]

текст

<p>[short id="54"] текст</p>

текст

[short align="aligncenter" width="495"]любой текст внутри[/short]
*/

#2 Какое регулярное выражение используется

Пример того, какое регулярное выражение получается в результате работы функции (зависит от шорткодов которые зарегистрированные в текущий момент) (версия wordpress 4.4):

(?:[\r\n\t ]|\xC2\xA0| )*+(\[(embed|wp_caption|caption|gallery|playlist|audio|video|democracy|democracy_archives|download)(?![\w-])[^\]\/]*(?:\/(?!\])[^\]\/]*)*?(?:\/\]|\](?:[^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+\[\/\2\])?))(?:[\r\n\t ]|\xC2\xA0| )*+<\/p>

Код shortcode unautop: wp-includes/formatting.php WP 4.8.2

<?php
function shortcode_unautop( $pee ) {
	global $shortcode_tags;

	if ( empty( $shortcode_tags ) || !is_array( $shortcode_tags ) ) {
		return $pee;
	}

	$tagregexp = join( '|', array_map( 'preg_quote', array_keys( $shortcode_tags ) ) );
	$spaces = wp_spaces_regexp();

	$pattern =
		  '/'
		. '<p>'                              // Opening paragraph
		. '(?:' . $spaces . ')*+'            // Optional leading whitespace
		. '('                                // 1: The shortcode
		.     '\\['                          // Opening bracket
		.     "($tagregexp)"                 // 2: Shortcode name
		.     '(?![\\w-])'                   // Not followed by word character or hyphen
		                                     // Unroll the loop: Inside the opening shortcode tag
		.     '[^\\]\\/]*'                   // Not a closing bracket or forward slash
		.     '(?:'
		.         '\\/(?!\\])'               // A forward slash not followed by a closing bracket
		.         '[^\\]\\/]*'               // Not a closing bracket or forward slash
		.     ')*?'
		.     '(?:'
		.         '\\/\\]'                   // Self closing tag and closing bracket
		.     '|'
		.         '\\]'                      // Closing bracket
		.         '(?:'                      // Unroll the loop: Optionally, anything between the opening and closing shortcode tags
		.             '[^\\[]*+'             // Not an opening bracket
		.             '(?:'
		.                 '\\[(?!\\/\\2\\])' // An opening bracket not followed by the closing shortcode tag
		.                 '[^\\[]*+'         // Not an opening bracket
		.             ')*+'
		.             '\\[\\/\\2\\]'         // Closing shortcode tag
		.         ')?'
		.     ')'
		. ')'
		. '(?:' . $spaces . ')*+'            // optional trailing whitespace
		. '<\\/p>'                           // closing paragraph
		. '/';

	return preg_replace( $pattern, '$1', $pee );
}

Cвязанные функции

Из метки: wpautop

Еще из раздела: Форматирование

shortcode_unautop Комментариев нет

Здравствуйте, !

Ваш комментарий