remove parágrafos vazios do the_content?

31

Olá pessoal Eu simplesmente quero evitar a criação de parágrafos vazios no meu post wordpress. Isso acontece com bastante frequência quando se tenta armazenar manualmente o conteúdo.

Eu não sei porque isso não entra em vigor?

/*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 / atualizar:

parece que o problema é 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');

Eu mesmo fiz essa função para filtrar um tipo de padrão shortcode em minhas postagens e páginas. Mesmo que no meu backend o post esteja completamente pronto sem parágrafos e espaçamentos desnecessários, o resultado é assim:

<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>

alguma ideia de onde vêm esses p vazios?

    
por mathiregister 03.04.2011 / 12:13
fonte

10 respostas

19

O WordPress inserirá automaticamente as tags <p> e </p> , que separam as quebras de conteúdo em uma postagem ou página. Se, por algum motivo, você quiser ou precisar removê-los, use um dos seguintes snippets de código.

Para desabilitar completamente o filtro wpautop, você pode usar:

remove_filter('the_content', 'wpautop');

Se você ainda quiser que isso funcione, tente adicionar um valor de prioridade posterior ao seu filtro, como:

add_filter('the_content', 'removeEmptyParagraphs',99999);
    
por Bainternet 03.04.2011 / 14:15
fonte
20

Eu tive o mesmo problema que você tem. Eu só fiz uma ... digamos ... solução não muito bonita, mas funciona e até agora é a única solução que tenho. Eu adicionei uma pequena linha de JavaScript. Ele precisa de jQuery, mas tenho certeza que você pode descobrir isso sem.

Este é o meu pequeno JS:

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

Isso funciona para mim!

    
por David Faber 02.01.2012 / 11:00
fonte
10

Eu sei que isso já está marcado como 'resolvido', mas apenas para referência, aqui está uma função que faz exatamente o que você quer, sem precisar adicionar marcações às postagens. Basta colocar isso nas funções do seu 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);
}

Isto é desta essência: enlace

    
por Michelle 23.05.2012 / 00:03
fonte
10

Basta usar CSS

p:empty {
  display: none;
}
    
por at least three characters 30.09.2015 / 15:24
fonte
5

Você pode simplesmente executar seu filtro antes que o desagradável wpautop ganhe e mexa com a marcação.

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

Dessa forma, você já converteu o que precisa no momento em que se conecta, o que ajuda em alguns casos.

    
por t31os 06.04.2011 / 14:40
fonte
0

Eu achei isso estranho, mas, na verdade, chamar the_content() irá inserir parágrafos da maneira que você descreveu. Se você quiser o código html, basicamente como você o inseriu (o mesmo que "view HTML" ao editar), use get_the_content() , que retorna o conteúdo sem formatação e tags de parágrafo.

Como ele é retornado, use algo como:

echo get_the_content();

Veja também: enlace

    
por cwd 03.04.2011 / 16:40
fonte
0

Isso removerá recursivamente todas as tags html vazias da string

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
);}

O padrão é retirado de enlace

    
por user2914440 07.05.2014 / 15:37
fonte
0

Se você tiver <p> tags com espaço em branco no conteúdo, vá para sua postagem ou página e edite-a não no estilo visual.

você encontraria alguns &nbsp; lá ... Exclua e as tags <p> vazias desaparecerão.

    
por Christian Isak 15.05.2017 / 12:33
fonte
0

Mesma abordagem que 2 respostas antes de mim mas uma regex atualizada, porque a sua não funcionou para mim.

o regex: /<p>(?:\s|&nbsp;)*?<\/p>/i (grupo sem captura que procura qualquer número de espaço em branco ou &nbsp; s dentro da tag p, todos os casos sem distinção.

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

Para ter apenas conteúdo HTML sem

tags podemos usar o seguinte loop para colocar apenas o html sem formatação do post ou página
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
    
por Shashank 19.09.2018 / 13:15
fonte