Как получить только текст из wp_content(), а не из wp_excerpt()?

22 февр. 2013 г., 10:15:45
Просмотры: 54.6K
Голосов: 14

В настоящее время я разрабатываю сайт на WordPress 3.5, и мне нужно получить текст поста (только текст, без изображений) на странице архива. Я могу получить его с помощью метода wp_excerpt() без каких-либо проблем. Но основная проблема для меня заключается в том, что я не могу получить точную разметку текста. Метод wp_excerpt() возвращает текст, который игнорирует все дополнительные пробелы и переносы строк. Что мне делать? Я думаю, что смогу получить только текст поста с точной разметкой, если буду использовать метод wp_content(). Заранее спасибо за помощь!

0
Все ответы на вопрос 5
2
22

Или даже проще:

echo wp_strip_all_tags( get_the_content() );

Используя:

Получает содержимое записи. (Должен использоваться внутри цикла Loop)

Важное отличие от the_content() в том, что get_the_content() не пропускает содержимое через фильтр 'the_content'. Это означает, что get_the_content() не будет автоматически встраивать видео или обрабатывать шорткоды, среди прочего.

Корректно удаляет все HTML-теги, включая script и style.

30 сент. 2015 г. 17:57:22
Комментарии

Это следует утвердить в качестве ответа.

AlbertSamuel AlbertSamuel
9 апр. 2018 г. 02:44:18

Это также не учитывает шорткоды, оберните в strip_shortcodes()

Ostap Brehin Ostap Brehin
25 мая 2020 г. 20:29:06
1

В 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(']]>', ']]&gt;', $content);
echo $content;

Источник кода preg_replace: http://www.phpzag.com/php-remove-image-tags-from-a-html-string-with-preg_replace/

Возможно, вам также понадобится удалить шорткоды, если они используются. Это также можно сделать с помощью preg_replace, и я уверен, что вы найдёте примеры в Google.

22 февр. 2013 г. 12:24:20
Комментарии

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

Thiha Maung Thiha Maung
24 февр. 2013 г. 13:08:16
0

Я объединил результаты из других ответов в этом посте, чтобы удалить изображения и аудио и т.д., но сохранить форматирование. Сначала получаю контент с помощью 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>");

10 июн. 2018 г. 19:50:18
0

Следующий код отлично работает для меня. Просто добавьте его в файл 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();.

16 нояб. 2017 г. 21:06:20
1

Вот код для удаления галереи и оставления только контента.

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

Разве это не то же самое, что сказали некоторые другие ответы, только с меньшими объяснениями?

Matthew Brown aka Lord Matt Matthew Brown aka Lord Matt
4 сент. 2019 г. 08:26:04