Обрезать содержимое без удаления форматирования.

Вопрос или проблема

Я попробовал

<?php $trimmed = wp_trim_words( get_the_content(), 55, "" ); ?>
<?php echo $trimmed; ?>

и

<?php $trimmed = wp_trim_words( the_content(), 55, "" ); ?>
<?php echo $trimmed; ?>

второй вариант с the_content не работает так, как ожидалось.

Некоторые посты содержат видео в контенте, и когда форматирование удаляется, отображается код встраивания.

ИЗМЕНЕНИЕ: Попробую объяснить более понятно, автор написал посты с изображениями, ссылками на внешние изображения, видео, текстом, отформатированным текстом wysiwyg и т. д., все это в основном поле контента обычного поста. Так что все перечисленные вещи существуют в the_content.

Что автор НЕ сделал, так это использовал поле отрывка или тег и создал действительно длинные посты. Поэтому я пытаюсь создать страницу таких постов, которые обрезаны.

Ну, насколько я понял, вы хотите удалить все HTML-теги из обрезанного the_content. Правильно???

Попробуйте функцию wp_filter_nohtml_kses. Надеюсь, это сработает. Вот полный код —

<?php $trimmed = wp_filter_nohtml_kses( wp_trim_words( get_the_content(), 55, "" ) ); ?>
<?php echo $trimmed; ?>
<?php echo  force_balance_tags( html_entity_decode( wp_trim_words( htmlentities( wpautop(get_the_content()) ), 40 ) ) ); ?>

Этот код работает для меня для обрезки контента без удаления форматирования

Я использую это:

в вашем functions.php

function custom_trim_content_with_html($text){
    $length = 1250;
    if(strlen($text)<$length+10) return $text;//не обрезать, если слишком коротко

    $break_pos = strpos($text, ' ', $length);//найти следующий пробел после желаемой длины
    $visible = substr($text, 0, $break_pos);
    $visible = strip_tags( $visible, array('<p>')); // разрешить тег p

    return force_balance_tags($visible) . "…";
}

в вашем цикле или коде одиночного поста:

echo custom_trim_content_with_html(get_the_content());

Ответ или решение

Когда речь заходит о необходимости обрезки контента WordPress без потери его форматирования, ваше внимание должно быть направлено на функциональное и гибкое управление содержимым, включая поддержку HTML-тегов. Это особенно важно, если ваши посты содержат разнообразные элементы, такие как изображения, видео и форматированный текст. Давайте рассмотрим, как это можно сделать эффективно и без потери форматирования.

1. Анализ проблемы

Ваша задача — создать обрезанную версию контента, сохраняя при этом HTML-форматирование, что может включать в себя видео, изображения и другие встроенные элементы. Это требует более тонкого подхода, чем просто стандартные функции обрезки содержимого, которые по умолчанию удаляют все HTML-теги, что приводит к возникновению ошибок в разметке.

2. Решение с использованием PHP-функции

На первую очередь, обратите внимание на использование комбинации функций WordPress и PHP, которые позволят сохранить HTML при обрезке.

function custom_trim_content_with_html($text){
    $length = 1250; // Укажите желаемую длину
    if(strlen($text) < $length + 10) return $text; // Не обрезаем, если текст слишком короткий

    $break_pos = strpos($text, ' ', $length); // Находим следующее пробел после заданной длины
    $visible = substr($text, 0, $break_pos);
    $visible = strip_tags($visible, '<p><img><a><video><div>'); // Разрешаем определенные теги

    return force_balance_tags($visible) . "…";
}

3. Интеграция в шаблон

Для интеграции этой функции в ваш код, используйте её в цикле WordPress или на любой странице, где вы выводите контент:

echo custom_trim_content_with_html(get_the_content());

4. Пояснение работы

  1. Длина текста: В функции custom_trim_content_with_html задаётся максимальная длина выводимого текста.
  2. Сохранение разметки: Использование strip_tags() позволяет вам указать, какие HTML-теги необходимо сохранить. В данном случае указаны <p>, <img>, <a>, <video>, <div>, но их список может быть расширен или сокращён по вашему усмотрению.
  3. Корректировка разметки: Функция force_balance_tags() гарантирует, что HTML-код будет корректно закрыт, предотвращая сбои в отображении, вызванные не закрытыми тегами.

5. Дополнительные рекомендации

  • Тестируйте на различных типах содержимого: Убедитесь, что тримминг совпадает с вашими ожиданиями для различных типов постов: текст, изображение, видео и т.д.
  • Пользовательский ввод: Если авторы активно пишут материалы с различными форматами, регулярно проверяйте, как ваш метод обработки контента влияет на их представление.
  • Обновляемость: Следите за обновлениями WordPress, которые могут содержать улучшения функций работы с контентом или безопасности при работе с HTML.

Эти шаги помогут вам не только решить проблему, но и обеспечить более профессиональное и гибкое управление контентом на вашем сайте, что сделает его более привлекательным и удобным для пользователей.

Оцените материал
Добавить комментарий

Капча загружается...