Функция strip_shortcodes()
в WordPress удаляет все шорткоды из переданного контента. Она удаляет только те шорткоды, которые зарегистрированы в системе на момент вызова функции. Если шорткод больше не зарегистрирован (например, был добавлен плагином, который затем деактивирован), эта функция не сможет его удалить.
strip_shortcodes( string $content ): string
- $content (строка) — обязательный параметр. Текст, из которого нужно удалить шорткоды.
- Возвращаемое значение: Строка. Контент без зарегистрированных шорткодов.
Когда использовать?
strip_shortcodes()
полезна, когда нужно очистить текст от всех шорткодов, например, при отображении контента в специфических частях сайта, таких как главная страница или RSS-канал, где шорткоды могут быть нежелательны.
Пример 1: Удаление шорткодов на главной странице
Этот пример показывает, как удалять шорткоды только на главной странице (home), но не на страницах постов или архивов:
add_filter('the_content', 'remove_shortcodes_on_homepage');
function remove_shortcodes_on_homepage($content) {
if ( is_front_page() ) {
$content = strip_shortcodes( $content );
}
return $content;
}
В этом коде используется фильтр the_content
, чтобы очистить контент на главной странице от всех шорткодов, оставляя их на остальных страницах.
Пример 2: Удаление конкретного шорткода
Иногда необходимо удалить только один конкретный шорткод, оставив все остальные. Это можно сделать с помощью функции get_shortcode_regex()
.
$content = "В начале текста вставлена галерея, а затем добавлено видео.";
$regex = get_shortcode_regex( array('gallery') );
$content = preg_replace( "/$regex/", '', $content );
echo $content;
Вывод:
В начале текста вставлена галерея, а затем добавлено видео.
Этот пример удаляет только шорткод gallery
, оставляя шорткод video
в контенте.
Пример 3: Удаление несуществующего шорткода через фильтр
С версии WordPress 4.4 вы можете добавлять шорткоды, которые не зарегистрированы, в список удаляемых через фильтр strip_shortcodes_tagnames
.
add_filter( 'strip_shortcodes_tagnames', function($shortcodes_to_remove){
$shortcodes_to_remove[] = 'obsolete_shortcode';
return $shortcodes_to_remove;
} );
$content = "Текст с устаревшими шорткодами: [obsolete_shortcode]контент[/obsolete_shortcode] и [new_shortcode]новый контент[/new_shortcode].";
$content = strip_shortcodes( $content );
echo $content;
Вывод:
Текст с устаревшими шорткодами: и [new_shortcode]новый контент[/new_shortcode].
Этот пример добавляет шорткод obsolete_shortcode
в список для удаления, даже если он не зарегистрирован в WordPress.
Пример 4: Удаление всех конструкций, похожих на шорткоды, с помощью регулярных выражений
Если в тексте есть конструкции, похожие на шорткоды, но они не зарегистрированы, функция strip_shortcodes()
их не удалит. В этом случае можно воспользоваться регулярными выражениями:
$content = "Текст содержит несуществующие шорткоды: [random] и [unknown]контент[/unknown].";
$content = preg_replace( '~\[[^\]]+\]~', '', $content );
echo $content;
Вывод:
Текст содержит несуществующие шорткоды: и контент.
Этот пример удаляет все конструкции, которые выглядят как шорткоды, но не зарегистрированы в WordPress.
Пример 5: Удаление шорткодов вместе с их содержимым
Если необходимо удалить не только шорткод, но и весь контент между открывающим и закрывающим тегами шорткода, можно воспользоваться следующей регуляркой:
$content = "Текст содержит шорткод с контентом: [custom_shortcode]это удалится[/custom_shortcode].";
$content = preg_replace( '~\[/?custom_shortcode[^\]]*\].*?\[/custom_shortcode\]~s', '', $content );
echo $content;
Вывод:
Текст содержит шорткод с контентом: .
Этот пример удаляет весь контент шорткода custom_shortcode
вместе с его содержимым.
Заключение
Функция strip_shortcodes()
— это удобный инструмент для удаления шорткодов из контента. Она полезна в ситуациях, когда нужно очистить текст от шорткодов, будь то при выводе контента на главной странице, удалении устаревших шорткодов или работы с текстами, содержащими несуществующие конструкции шорткодов.