strip_shortcodes()
Удаляет/вырезает все шоткоды из переданного текста (контента).
Удаляться будут только те шоткоды, о которых WordPress знает, т.е. только зарегистрированные шоткоды. Конструкции вида [...]
или [asd]...[/asd]
удаляться не будут.
Хуки из функции
Возвращает
Строку
. Текст без шоткодов.
Использование
$content = strip_shortcodes( $content );
- $content(строка) (обязательный)
- Текст, в котором нужно удалить все шорткоды.
Примеры
#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; }
#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] конец. И еще один контентный все.
#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] конец. И еще один контентный все.
#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 | Введена. |