supprimer les paragraphes vides du contenu?

31

Hé les gars, Je veux simplement empêcher la création de paragraphes vides dans mon post wordpress. Cela se produit assez souvent lorsque vous essayez d'espacer manuellement le contenu.

Je ne sais pas pourquoi cela ne prend pas effet?

/*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');

modifier / mettre à jour:

semble que le problème est le suivant:

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

J'ai moi-même fait cette fonction pour filtrer une sorte de modèle de code court dans mes publications et mes pages. Même si dans mon backend, le post est complètement fait sans paragraphes ni espacements inutiles, le résultat est le suivant:

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

une idée d'où vient ce p vide?

    
posée mathiregister 03.04.2011 - 12:13

10 réponses

19

WordPress insérera automatiquement les balises <p> et </p> qui séparent les coupures de contenu dans une publication ou une page. Si, pour une raison quelconque, vous souhaitez ou souhaitez les supprimer, vous pouvez utiliser l'un des extraits de code suivants.

Pour désactiver complètement le filtre wpautop, vous pouvez utiliser:

remove_filter('the_content', 'wpautop');

Si vous souhaitez toujours que cela fonctionne, essayez d'ajouter une valeur de priorité ultérieure à votre filtre, par exemple:

add_filter('the_content', 'removeEmptyParagraphs',99999);
    
réponse donnée Bainternet 03.04.2011 - 14:15
20

J'ai eu le même problème que vous. Je viens de faire une ... disons ... pas très belle solution, mais cela fonctionne et jusqu'à présent, c'est la seule solution que j'ai. J'ai ajouté une petite ligne JavaScript. Il a besoin de jQuery, mais je suis sûr que vous pouvez le résoudre sans.

Ceci est mon petit JS:

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

Cela fonctionne pour moi!

    
réponse donnée David Faber 02.01.2012 - 11:00
10

Je sais que cela est déjà marqué comme "résolu", mais juste pour référence, voici une fonction qui fait exactement ce que vous voulez sans avoir à ajouter de balises à vos publications. Il suffit de mettre ceci dans le functions.php de votre thème:

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

Cela provient de cet élément essentiel: enlace

    
réponse donnée Michelle 23.05.2012 - 00:03
10

Utilisez simplement CSS

p:empty {
  display: none;
}
    
réponse donnée at least three characters 30.09.2015 - 15:24
5

Vous pouvez simplement lancer votre filtre avant que wpautop ne s'accroche et ne corrige le balisage.

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

De cette façon, vous avez déjà converti ce dont vous avez besoin au moment de l’accrochage, ce qui peut aider dans certains cas.

    
réponse donnée t31os 06.04.2011 - 14:40
0

J'ai trouvé cela bizarre, mais appeler réellement the_content() insérera des paragraphes de la manière que vous décrivez. Si vous voulez le code HTML, en gros comme vous l'avez entré (le même que "view HTML" lors de l'édition), utilisez get_the_content() qui renvoie le contenu sans balises de formatage et de paragraphe.

Puisqu'il le retourne, assurez-vous d'utiliser quelque chose comme:

echo get_the_content();

Voir aussi: enlace

    
réponse donnée cwd 03.04.2011 - 16:40
0

Ceci supprimera récursivement toutes les balises HTML vides de la chaîne

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

Le motif provient du enlace

.     
réponse donnée user2914440 07.05.2014 - 15:37
0

Si vous avez des balises <p> avec un espace dans le contenu, accédez à votre message ou à votre page et ne le modifiez pas dans un style visuel.

vous y trouverez des &nbsp; .. Supprimez-le et les balises <p> vides disparaîtront.

    
réponse donnée Christian Isak 15.05.2017 - 12:33
0

Même approche que 2 réponses devant moi, mais une regex mise à jour, parce que sa n'a pas fonctionné pour moi.

la regex: /<p>(?:\s|&nbsp;)*?<\/p>/i (groupe non capturé recherchant un nombre quelconque d'espaces ou de &nbsp; s dans une balise p, tous les cas insensibles.

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

Pour avoir uniquement du contenu HTML sans

balises

, nous pouvons utiliser la boucle suivante pour ne mettre que le code HTML sans formater la publication ou la page
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>
    
réponse donnée Shashank 19.09.2018 - 13:15

Lire d'autres questions sur les étiquettes