eliminar etiquetas <p> de the_content
Tengo un formato de entrada de tipo Imagen y estoy teniendo un problema donde la imagen está siendo envuelta por una etiqueta <p>
. Quiero deshacerme de esa etiqueta (específicamente en la versión de single.php
) para esos tipos de entradas.
¿Cómo puedo acceder al formateo en un tema y eliminar las etiquetas <p>
, o crear cualquier formato que desee para la salida de este tipo de entrada, sin afectar a las entradas de un formato diferente?

Si este tipo de publicación se llama "imagen", puedes crear una plantilla individual para manejar la visualización solo del tipo de publicación de imagen.
Simplemente copia tu archivo 'single.php' y renombra la copia como 'single-image.php'. Ahora puedes controlar solo las publicaciones de imágenes. Para eliminar etiquetas, me gusta usar la función strip_tags()
. Si imprimes el contenido de la publicación con the_content()
ya se aplica el filtro de contenido, envolviendo las líneas en etiquetas <p>
.
Aquí tienes un ejemplo de cómo podrías obtener el contenido de tu imagen sin las etiquetas:
$imageContent = get_the_content();
$stripped = strip_tags($imageContent, '<br><a>'); //reemplaza <br> y <a> con las etiquetas que quieras conservar después del strip
echo $stripped;
¡Espero que esto ayude!

WordPress añade automáticamente las etiquetas <p>
al contenido. Por lo tanto, estas se muestran al cargar el contenido. Esto ocurre debido al filtro wpautop
. Así que eliminaremos este filtro únicamente para el tipo de entrada image
. Puedes gestionar esto añadiendo el siguiente código en el archivo functions.php.
// Añadir el filtro para gestionar las etiquetas p
add_filter( 'the_content', 'wti_remove_autop_for_image', 0 );
function wti_remove_autop_for_image( $content )
{
global $post;
// Verificar si es una entrada individual y del tipo 'image', luego eliminar el filtro
if ( is_single() && $post->post_type == 'image' )
remove_filter('the_content', 'wpautop');
return $content;
}
is_single()
verifica si se está mostrando una entrada individual.

Por defecto, WordPress añade etiquetas de párrafo a las descripciones de categorías. Detén esto añadiendo lo siguiente a tu archivo functions.php
// Eliminar etiquetas p de la descripción de categoría
remove_filter('term_description','wpautop');
Sencillo y fácil (sin código).
Gracias

Simplemente añade la siguiente línea de código en el archivo functions.php de tu tema
Para el contenido:
remove_filter( 'the_content', 'wpautop' );
Para el extracto:
remove_filter( 'the_excerpt', 'wpautop' );
Más información: https://codex.wordpress.org/Function_Reference/wpautop

Puedes utilizar clases específicas para publicaciones como single-post
o single-format-standard
y ocultarlas según lo necesites solo en una página individual, para que no haya conflicto con otras partes del sitio web.
Código CSS de ejemplo*
.single-post .entry-content p:empty { display: none; }
Código CSS de ejemplo para formato de publicación específico de Imagen
.single-format-image .entry-content p:empty { display: none; }

Otra forma de codificarlo basada en la solución de @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;
}

aunque la consulta ya ha sido respondida, publico lo siguiente como referencia adicional.
remove_filter ('the_exceprt', 'wpautop');
remove_filter ('the_content', 'wpautop');
remove_filter('term_description','wpautop');

Con wp_strip_all_tags
puedes eliminar todas las etiquetas HTML incluyendo p, div, etc.
https://developer.wordpress.org/reference/functions/wp_strip_all_tags/
wp_strip_all_tags(category_description());
