¿Desea eliminar los párrafos vacíos de the_content?

31

Hola chicos, Simplemente quiero evitar la creación de párrafos vacíos en mi publicación de wordpress. Eso sucede con bastante frecuencia cuando se intenta espaciar manualmente el contenido.

No sé por qué esto no tiene efecto?

/*Remove empty paragraph tags from the_content*/
function removeEmptyParagraphs($content) {

    /*$pattern = "/<p[^>]*><\/p[^>]*>/";   
    $content = preg_replace($pattern, '', $content);*/
    $content = str_replace("<p></p>","",$content);
    return $content;
}

add_filter('the_content', 'removeEmptyParagraphs');

editar / actualizar:

parece que el problema es este:

function qanda($content) {

    // filters for [q=some question] and [a=some answer]
    // wraps it inside of <div class="qanda"><div class="question"> </div><div class="answer"> </div></div>
    $content = preg_replace('/\[q=(.+?)].+?\[a=(.+?)]/is', '<div class="qanda"><div class="question">$1</div><div class="answer">$2</div></div>', $content);

    return $content;
}

add_filter('the_content', 'qanda');

Hice esta función yo mismo para filtrar un tipo de patrón de código abreviado en mis publicaciones y páginas. Aunque en mi backend, la publicación está completamente hecha sin párrafos y espacios innecesarios, el resultado es el siguiente:

<div class="entry">

    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>
    <p></p>
    <p></p>
    <div class="qanda">...</div>

</div>

¿Alguna idea de dónde vienen estas "p" vacías?

    
pregunta mathiregister 03.04.2011 - 12:13

10 respuestas

19

WordPress insertará automáticamente las etiquetas <p> y </p> que separan los saltos de contenido dentro de una publicación o página. Si, por algún motivo, desea o necesita eliminarlos, puede utilizar cualquiera de los siguientes fragmentos de código.

Para deshabilitar completamente el filtro wpautop, puedes usar:

remove_filter('the_content', 'wpautop');

Si aún desea que esto funcione, intente agregar un valor de prioridad posterior a su filtro, por ejemplo:

add_filter('the_content', 'removeEmptyParagraphs',99999);
    
respondido por el Bainternet 03.04.2011 - 14:15
20

Tuve el mismo problema que tú. Acabo de hacer una ... no es una solución muy bonita, pero funciona y hasta ahora es la única solución que tengo. He añadido una pequeña línea de JavaScript. Necesita jQuery, pero estoy seguro de que puedes resolverlo sin.

Este es mi pequeño JS:

$('p:empty').remove();

¡Esto funciona para mí!

    
respondido por el David Faber 02.01.2012 - 11:00
10

Sé que esto ya está marcado como 'resuelto', pero solo como referencia, aquí hay una función que hace exactamente lo que quiere sin tener que agregar marcas a las publicaciones. Solo pon esto en las funciones de tu tema. Php:

add_filter('the_content', 'remove_empty_p', 20, 1);
function remove_empty_p($content){
    $content = force_balance_tags($content);
    return preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);
}

Esto es de esta esencia: enlace

    
respondido por el Michelle 23.05.2012 - 00:03
10

Simplemente usa CSS

p:empty {
  display: none;
}
    
respondido por el at least three characters 30.09.2015 - 15:24
5

Puedes ejecutar tu filtro antes de que% desagradable wpautop se enganche y se meta con el marcado.

add_filter('the_content', 'qanda', 7 );

De esa manera, ya has convertido lo que necesitas para cuando se engancha, lo que ayuda en algunos casos.

    
respondido por el t31os 06.04.2011 - 14:40
0

Encontré esto extraño, pero en realidad llamar a the_content() insertará párrafos de la manera que lo describe. Si desea el código html, básicamente como lo ingresó (igual que "ver HTML" al editar), use get_the_content() que devuelve el contenido sin formato y etiquetas de párrafo.

Ya que lo devuelve, asegúrate de usar algo como:

echo get_the_content();

Vea también: enlace

    
respondido por el cwd 03.04.2011 - 16:40
0

Esto eliminará recursivamente todas las etiquetas html vacías de la cadena

add_filter('the_content', 'remove_empty_tags_recursive', 20, 1);
function remove_empty_tags_recursive ($str, $repto = NULL) {
         $str = force_balance_tags($str);
         //** Return if string not given or empty.
         if (!is_string ($str)
         || trim ($str) == '')
        return $str;

        //** Recursive empty HTML tags.
       return preg_replace (

              //** Pattern written by Junaid Atari.
              '/<([^<\/>]*)>([\s]*?|(?R))<\/>/imsU',

             //** Replace with nothing if string empty.
             !is_string ($repto) ? '' : $repto,

            //** Source string
           $str
);}

El patrón se toma de enlace

    
respondido por el user2914440 07.05.2014 - 15:37
0

Si tiene etiquetas <p> con espacios en blanco en el contenido, Ve a tu publicación o página y edítala no en estilo visual.

usted encontraría &nbsp; ahí. Elimínelo y las etiquetas <p> vacías desaparecerán.

    
respondido por el Christian Isak 15.05.2017 - 12:33
0

El mismo enfoque que 2 respuestas antes que yo, pero una expresión regular actualizada, porque la suya no funcionó para mí.

la expresión regular: /<p>(?:\s|&nbsp;)*?<\/p>/i (El grupo no captura busca cualquier número de espacios en blanco o &nbsp; s dentro de p-tag, todo insensivo caso.

add_filter('the_content', function($content) {
    $content = force_balance_tags($content);
    return preg_replace('/<p>(?:\s|&nbsp;)*?<\/p>/i', '', $content);
}, 10, 1);
    
respondido por el kater louis 06.12.2017 - 11:33
0

Para tener solo contenido html sin

podemos usar el siguiente bucle para poner solo el html sin el formato de la publicación o página
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
    
respondido por el Shashank 19.09.2018 - 13:15

Lea otras preguntas en las etiquetas