wp_kses_allowed_html()WP 3.5.0

Возвращает список допустимых HTML тегов и их атрибутов для использования этого списка в функциях типа: wp_kses().

Какой тип списка допустимых тегов будет возращен, определяется указанным контекстом.

Использует глобальные переменные: $allowedposttags, $allowedtags, $allowedentitynames;

Основа для: wp_kses()
1 раз — 0.000061 сек (очень быстро) | 50000 раз — 1.72 сек (быстро)
Хуки из функции

Возвращает

Массив. Список тегов и их атрибутов в виде массива.

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

wp_kses_allowed_html( $context );
$context(строка)

Контекст для которого предполагается использовать полученный список допустимых тегов. Может быть:

  • post - оставит теги допустимые для постов (глобальная переменная $allowedposttags)
  • strip - вырежет все теги. Аналог функции PHP strip_tags()
  • entities - HTML сущности, как   (глобальная переменная $allowedentitynames)
  • user_description - базовый список тегов ($allowedtags) + тег <a rel="">.
  • data или default - список базовых допустимых тегов. Используется при очистки текста комментария (глобальная переменная $allowedtags)

По умолчанию: ''

Примеры

0

#1 Получим список допустимых тегов по умолчанию

Тут список получается для пользователя с ролью Администратор. В зависимсоти от роли и указанного контекста список может меняться.

$data = wp_kses_allowed_html( $context );

print_r( $data );

/* получим
Array
(
	[a] => Array
		(
			[href] => 1
			[title] => 1
		)

	[abbr] => Array
		(
			[title] => 1
		)

	[acronym] => Array
		(
			[title] => 1
		)

	[b] => Array()
	[blockquote] => Array
		(
			[cite] => 1
		)

	[cite] => Array()
	[code] => Array()
	[del] => Array
		(
			[datetime] => 1
		)

	[em] => Array()
	[i] => Array()
	[q] => Array
		(
			[cite] => 1
		)

	[s] => Array()
	[strike] => Array()
	[strong] => Array()
	[pre] => Array
		(
			[class] => 1
			[name] => 1
			[code] => 1
		)

	[var] => Array()
	[h3] => Array()
	[h4] => Array()
	[img] => Array
		(
			[class] => 1
			[alt] => 1
			[src] => 1
		)

	[li] => Array()
	[ol] => Array()
	[ul] => Array()

)
*/
0

#2 Если указать контекст

// запрещает все теги
$data = wp_kses_allowed_html( 'strip' );
/*
Array
(
)
*/

// позволяет получить список HTML-сущностей, таких как  
$data = wp_kses_allowed_html( 'entities' );
/*
Array
(
	[0] => nbsp
	[1] => iexcl
	[2] => cent
	[3] => pound
	[4] => curren
	[5] => yen
	[6] => brvbar
	[7] => sect
	[8] => uml
	[9] => copy
	[10] => ordf
	[11] => laquo
	[12] => not
	[13] => shy
	[14] => reg
	[15] => macr
	[16] => deg
	[17] => plusmn
	[18] => acute
	[19] => micro
	[20] => para
	[21] => middot
	и т.д. ...
)
*/
// разрешает большинство инлайн-элементов и удаляет все блочные элементы, кроме blockquote
$allowed_html = wp_kses_allowed_html( 'data' );

// очень гибкий: позволяет передавать практически весь HTML - 
// то же самое, что обычно применяется к the_content по умолчанию
$allowed_html = wp_kses_allowed_html( 'post' );

Заметки

  • Global. Массив. $allowedposttags
  • Global. Массив. $allowedtags
  • Global. Массив. $allowedentitynames

Список изменений

С версии 3.5.0 Введена.
С версии 5.0.1 form removed as allowable HTML tag.

Код wp_kses_allowed_html() WP 6.5.2

function wp_kses_allowed_html( $context = '' ) {
	global $allowedposttags, $allowedtags, $allowedentitynames;

	if ( is_array( $context ) ) {
		// When `$context` is an array it's actually an array of allowed HTML elements and attributes.
		$html    = $context;
		$context = 'explicit';

		/**
		 * Filters the HTML tags that are allowed for a given context.
		 *
		 * HTML tags and attribute names are case-insensitive in HTML but must be
		 * added to the KSES allow list in lowercase. An item added to the allow list
		 * in upper or mixed case will not recognized as permitted by KSES.
		 *
		 * @since 3.5.0
		 *
		 * @param array[] $html    Allowed HTML tags.
		 * @param string  $context Context name.
		 */
		return apply_filters( 'wp_kses_allowed_html', $html, $context );
	}

	switch ( $context ) {
		case 'post':
			/** This filter is documented in wp-includes/kses.php */
			$tags = apply_filters( 'wp_kses_allowed_html', $allowedposttags, $context );

			// 5.0.1 removed the `<form>` tag, allow it if a filter is allowing it's sub-elements `<input>` or `<select>`.
			if ( ! CUSTOM_TAGS && ! isset( $tags['form'] ) && ( isset( $tags['input'] ) || isset( $tags['select'] ) ) ) {
				$tags = $allowedposttags;

				$tags['form'] = array(
					'action'         => true,
					'accept'         => true,
					'accept-charset' => true,
					'enctype'        => true,
					'method'         => true,
					'name'           => true,
					'target'         => true,
				);

				/** This filter is documented in wp-includes/kses.php */
				$tags = apply_filters( 'wp_kses_allowed_html', $tags, $context );
			}

			return $tags;

		case 'user_description':
		case 'pre_user_description':
			$tags             = $allowedtags;
			$tags['a']['rel'] = true;
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $tags, $context );

		case 'strip':
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', array(), $context );

		case 'entities':
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $allowedentitynames, $context );

		case 'data':
		default:
			/** This filter is documented in wp-includes/kses.php */
			return apply_filters( 'wp_kses_allowed_html', $allowedtags, $context );
	}
}