strip_shortcodes() WP 2.5.0

Видаляє/вирізує всі шоткод з переданого тексту (контенту).

Видалятимуться лише ті шоткоди, про які знає WordPress, тобто. лише зареєстровані шоткоди. Конструкції виду [...]або [asd]...[/asd]видалятися не будуть.

1 раз – 0.000307 сек
(швидко) | 50000 разів – 0.44 сек
(дуже швидко) |
PHP 7.1.11, WP 4.9.6

Хуки з функції

Повертає

Строку. Текст без шоткод.

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

$content = strip_shortcodes($content);
$content
(рядок) (обов’язковий)
Текст, де потрібно видалити всі шорткоди.

Приклади

0

#1 Вирізаємо шоткод з контенту

Видалимо шоткоди в текстах на головній сторінці (home), але нічого не видалятимемо на сторінці посту (single.php) або сторінці архівів (рубрики, мітки, дати).

add_filter('the_content', 'remove_shortcode_from_index');
function remove_shortcode_from_index($content) {
  if ( is_home() ) {
	$content = strip_shortcodes($content);
  }
  return $content;
}
0

#2 Видалимо шоткоди, яких немає у WP (нове з версії 4.4)

З версії 4.4. видаляти шоткод, про які ВП нічого не знає стало простіше – не потрібно писати жодних регулярок. Все можна зробити стандартними функціями WordPress. А також через фільтр.

Видалятимуться шорткоди за допомогою функції get_shortcode_regex() , в яку тепер можна передати масив, де вказати назву шоткода, який потрібно вирізати з контенту і таким чином отримати необхідне регулювання для використання в preg_replace() .

$content = "Початок [asd]text[/asd] кінець. І ще один контентний [myshort]text[/myshort] все.";
$regex = get_shortcode_regex( array('myshort') );
$content = preg_replace( "/$regex/", '', $content );
echo $content;

// Виведе: Початок [asd] text [/ asd] кінець. І ще один контентний усі.
0

#3 Видалення неіснуючого шорткоду через фільтр

Або можна додати неіснуючий шорткод у фільтр strip_shortcodes_tagnames , щоб ця функція strip_shortcodes() видаляла зазначений шорткод у тому числі.

// додамо неіснуючий шорткод масив для видалення
add_filter( 'strip_shortcodes_tagnames', function($tags_to_remove){
	$tags_to_remove[] = 'myshort';
	return $tags_to_remove;
} );

$content = "Початок [asd]text[/asd] кінець. І ще один контентний [myshort]text[/myshort] все.";
$content = strip_shortcodes($content);
echo $content;

// Виведе: Початок [asd] text [/ asd] кінець. І ще один контентний усі.
0

#4 Видалимо шорткоди, яких немає в WP (через регулювання)

strip_shortcodes() не буде видаляти конструкції схожі на шоткоди: [asd]або [asd]...[/asd]якщо вони не зареєстровані в WordPress. Щоб це зробити, можна скористатися регулярним виразом:

$content = "1 [foo] [asd]text[/asd] 2";
$content = preg_replace( '~[[^]]+]~', '', $content );
echo $content;

// Поверне: 1 text 2

Щоб вирізати тільки потрібний шорткод, наприклад [myshort] або [myshort]text[/myshort] використовуйте таке регулювання:

$content = "Початок [asd]text[/asd] кінець. І ще один [myshort] і контентний [myshort]text[/myshort] все.";
$content = preg_replace( '~[/?myshort[^]]*]~', '', $content );
echo $content;

// виведе: Початок [asd] text [/ asd] кінець. І ще один і контентний text все.

Виріжемо «контентний шорткод» разом із контеном:

$content = "Початок [asd]text[/asd] кінець. І ще один контентний [myshort]text[/myshort] все.";
$content = preg_replace( '~(?:[(myshort)[^]]*].*?[/])|(?:[myshort[^]]*])~s ', '', $content);
echo $content;

// Виведе: Початок [asd] text [/ asd] кінець. І ще один контентний усі.

нотатки

  • Global. Масив. $shortcode_tags

список змін

З версії 2.5.0Введено.

Код strip_shortcodes() WP 6.0.2

function strip_shortcodes( $content ) {
	Global $shortcode_tags;

	if ( false === strpos( $content, '[' ) ) {
		return $content;
	}

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

	// Find all registered tag names в $content.
	preg_match_all( '@[([^<>&/[]x00-x20=]++)@', $content, $matches );

	$tags_to_remove = array_keys($shortcode_tags);

	/**
	 * Filters list з короткимкодом повідомлень до remove з вмісту.
	 *
	 * @ Since 4.7.0
	 *
	 * @param array $tags_to_remove Array of shortcode tags to remove.
	 * @param string $content Content shortcodes are being removed from.
	 */
	$tags_to_remove = apply_filters( 'strip_shortcodes_tagnames', $tags_to_remove, $content);

	$tagnames = array_intersect( $tags_to_remove, $matches[1] );

	if (empty($tagnames)) {
		return $content;
	}

	$content = do_shortcodes_in_html_tags( $content, true, $tagnames );

	$ pattern = get_shortcode_regex ($ tagnames);
	$content = preg_replace_callback( "/$pattern/", 'strip_shortcode_tag', $content );

	// Always restore square braces so we don't break things like <!--[if IE ]>.
	$content = unescape_invalid_shortcodes( $content );

	return $content;
}

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

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