shortcode_parse_atts() WP 2.5.0

Парсит аргументи Шоткод передані у вигляді рядка.

Переданий рядок повинен містити лише аргументи у вигляді пари ключ="значение", без імені шоткода та його дужок.

Працює на основі:
get_shortcode_atts_regex()
1 раз – 0.000195 сек
(швидко) | 50000 разів – 0.07 сек
(швидкість світла)

Хуків немає.

Повертає

Массив|Строку. Список атрибутів і значення у вигляді масиву.

  • Поверне порожній масив при trim( $text ) == '""'.
  • Поверне порожній рядок при trim( $text ) == ''.
  • Решта збіги перевіряються через empty() .

Використання

shortcode_parse_atts($text);
$text
(рядок) (обов’язковий)
Рядок атрибутів шоткоду. Наприклад:
module="WP" foo='bar'.

Приклади

0

#1 Демонстрація роботи функції

$res = shortcode_parse_atts( ' module="WP" bar="" foo='bar'' );
print_r ($ res);
/*
Array
	[module] => WP
	[bar] =>
	[foo] => bar
*/
0

#2 Виріжемо та розберемо параметри шоткоду

Приклад того, як можна вирізати рядок параметрів шорткоду та розпарити її на окремі ключ=значение.

$str = <<<'STR'
	Контент
	[five_element name="big badaboom" ident="multipassport" foo='bar']
	Ще Контент
STR;

// для цієї перевірки шоткод повинен бути зареєстрований WP, див: add_shortcode()
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Введено.

Код shortcode_parse_atts() WP 6.0.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] );
			}
		}

		// Reject any unclosed HTML elements.
		foreach ($atts as &$value) {
			if ( false !== strpos( $value, '<' ) ) {
				if ( 1 !== preg_match( '/^[^<]*+(?:<[^>]*+>[^<]*+)*+$/', $value ) ) {
					$ value = '';
				}
			}
		}
	} else {
		$ atts = ltrim ($ text);
	}

	return $atts;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *