Удаление тегов <p> из the_content
У меня есть формат записи Image (Изображение), и я столкнулся с проблемой, где изображение оборачивается тегом <p>
. Я хочу избавиться от этого тега (особенно в версии single.php
) для этого типа записей.
Как можно получить доступ к форматированию в теме и удалить теги <p>
, или создать любой нужный формат для вывода этого типа записей, не затрагивая записи других форматов?

Если этот тип записи называется "image", вы можете создать отдельный шаблон для отображения только этого типа записи.
Просто скопируйте ваш файл 'single.php' и переименуйте копию в 'single-image.php'. Теперь вы можете управлять отображением только записей типа image. Для удаления HTML-тегов я предпочитаю использовать функцию strip_tags()
. Если вы выводите содержимое записи с помощью the_content()
, оно уже применяет фильтр содержимого, оборачивая строки в теги <p>
.
Вот пример, как можно получить содержимое вашего изображения без тегов:
$imageContent = get_the_content();
$stripped = strip_tags($imageContent, '<br><a>'); // замените <br> и <a> на любые теги, которые нужно оставить после очистки
echo $stripped;
Надеюсь, это поможет!

WordPress автоматически добавляет теги <p>
к контенту. Поэтому они отображаются при загрузке содержимого. Это происходит из-за фильтра wpautop
. Мы удалим этот фильтр только для типа записи image
. Вы можете управлять этим, добавив следующий код в файл functions.php.
// Добавляем фильтр для управления тегами p
add_filter( 'the_content', 'wti_remove_autop_for_image', 0 );
function wti_remove_autop_for_image( $content )
{
global $post;
// Проверяем, является ли это отдельной записью типа 'image' и удаляем фильтр
if ( is_single() && $post->post_type == 'image' )
remove_filter('the_content', 'wpautop');
return $content;
}
is_single()
проверяет, отображается ли отдельная запись.

Просто добавьте следующую строку кода в файл functions.php вашей темы
Для контента:
remove_filter( 'the_content', 'wpautop' );
Для краткого описания (excerpt):
remove_filter( 'the_excerpt', 'wpautop' );
Узнать больше: https://codex.wordpress.org/Function_Reference/wpautop

Вы можете использовать специальный класс записи для single-post
или single-format-standard
и скрыть его по вашему усмотрению только на странице записи, чтобы это не вызывало конфликтов с другими частями сайта.
Пример CSS кода*
.single-post .entry-content p:empty { display: none; }
Пример CSS кода для формата записи "Изображение"
.single-format-image .entry-content p:empty { display: none; }

Другой способ реализации на основе решения от @chittaranjan
add_filter( 'the_content', 'remove_autop_for_image', 0 );
function remove_autop_for_image( $content ) {
global $post;
if ( is_singular('image'))
remove_filter('the_content', 'wpautop');
return $content;
}

Хотя запрос уже был решён, публикую ниже для дальнейшего использования.
remove_filter ('the_exceprt', 'wpautop');
remove_filter ('the_content', 'wpautop');
remove_filter('term_description','wpautop');

Используя wp_strip_all_tags
, вы можете удалить все HTML-теги, включая p, div и другие.
https://developer.wordpress.org/reference/functions/wp_strip_all_tags/
wp_strip_all_tags(category_description());
