Как получить только текст из wp_content(), а не из wp_excerpt()?
В настоящее время я разрабатываю сайт на WordPress 3.5, и мне нужно получить текст поста (только текст, без изображений) на странице архива. Я могу получить его с помощью метода wp_excerpt()
без каких-либо проблем. Но основная проблема для меня заключается в том, что я не могу получить точную разметку текста. Метод wp_excerpt()
возвращает текст, который игнорирует все дополнительные пробелы и переносы строк. Что мне делать? Я думаю, что смогу получить только текст поста с точной разметкой, если буду использовать метод wp_content()
. Заранее спасибо за помощь!
Или даже проще:
echo wp_strip_all_tags( get_the_content() );
Используя:
Получает содержимое записи. (Должен использоваться внутри цикла Loop)
Важное отличие от
the_content()
в том, чтоget_the_content()
не пропускает содержимое через фильтр 'the_content
'. Это означает, чтоget_the_content()
не будет автоматически встраивать видео или обрабатывать шорткоды, среди прочего.
Корректно удаляет все HTML-теги, включая script и style.

В WordPress нет встроенной функции для получения только текста, но вы можете использовать фильтры WordPress и регулярные выражения для решения этой конкретной задачи.
Для получения неформатированного текста используйте функцию get_the_content(). Чтобы применить все фильтры, используйте её следующим образом (см. Codex: http://codex.wordpress.org/Function_Reference/the_content#Alternative_Usage):
$content = get_the_content();
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;
Перед применением фильтров у вас есть возможность внести свои изменения, например, удалить изображения. Вот как это сделать:
$content = get_the_content();
$content = preg_replace('/(<)([img])(\w+)([^>]*>)/', "", $content);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;
Источник кода preg_replace: http://www.phpzag.com/php-remove-image-tags-from-a-html-string-with-preg_replace/
Возможно, вам также понадобится удалить шорткоды, если они используются. Это также можно сделать с помощью preg_replace, и я уверен, что вы найдёте примеры в Google.

Большое спасибо за ваш ответ и также прошу прощения за мой поздний ответ. Я попробовал вот так. $content = get_the_content(); $content = preg_replace('/(<)([gallery])(\w+)([^>]*>)/', ”, $content); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); echo $content;
Но это не сработало. Изображения не удаляются, и я не вижу ожидаемого текста.

Я объединил результаты из других ответов в этом посте, чтобы удалить изображения и аудио и т.д., но сохранить форматирование. Сначала получаю контент с помощью get_the_content
, затем пропускаю его через фильтр "the_content" для добавления форматирования и т.д., а затем использую php-функцию strip_tags
, чтобы разрешить только ограниченное количество тегов.
strip_tags(apply_filters('the_content',get_the_content()),"<p><a><br><b><u><i><strong><span><div>");

Следующий код отлично работает для меня. Просто добавьте его в файл functions.php
вашей темы:
// Хук: для получения контента без изображений
add_filter('the_content', 'wpse_get_content_without_images');
function wpse_get_content_without_images() {
$content = get_the_content();
$content = preg_replace( '/<img[^>]+./', '', $content );
echo $content;
}
Затем получайте контент записи стандартным способом, используя echo the_content();
.

Вот код для удаления галереи и оставления только контента.
$content = get_the_content(); // Получаем контент записи
$content = preg_replace('/\[gallery.*ids=.(.*).\]/', "", $content); // Удаляем шорткод галереи
$content = apply_filters('the_content', $content); // Применяем фильтры контента
$content = str_replace(']]>', ']]>', $content); // Экранируем специальные символы
echo $content; // Выводим обработанный контент
