是否从内容中删除空段落(_C)?

时间:2011-04-03 作者:mathiregister

嘿,伙计们,我只是想防止在我的wordpress帖子中创建空段落。在尝试手动共享内容时,经常会发生这种情况。

我不知道这为什么不起作用?

/*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\');
编辑/更新:

问题似乎是:

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\');
我自己做这个函数是为了在我的帖子和页面中过滤一种短代码模式。尽管在我的后端,帖子完全没有段落和不必要的间距,但结果如下:

<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>
知道这个空p是从哪里来的吗?

11 个回复
最合适的回答,由SO网友:Bainternet 整理而成

WordPress将自动插入<p></p> 将文章或页面中的内容分隔开的标记。如果出于某种原因,希望或需要删除这些代码,可以使用以下代码段之一。

要完全禁用wpautop筛选器,可以使用:

remove_filter(\'the_content\', \'wpautop\');
如果您仍希望此功能正常运行,请尝试向筛选器添加一个稍后的优先级值,例如:

add_filter(\'the_content\', \'removeEmptyParagraphs\',99999);

SO网友:David Faber

我和你有同样的问题。我只是做了一个。。。比如说。。。不是很好的解决方案,但它很有效,到目前为止,这是我唯一的解决方案。我添加了一行JavaScript代码。它需要jQuery,但我相信您可以在没有jQuery的情况下解决它。

这是我的tiny JS:

$(\'p:empty\').remove();
这对我有用!

SO网友:at least three characters

Simply use CSS

p:empty {
  display: none;
}
SO网友:Michelle

我知道这已经标记为“已解决”,但仅供参考,这里有一个函数,它可以完全满足您的需要,而无需在帖子中添加任何标记。把这个放在你的主题函数中。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);
}
这来自于以下要点:https://gist.github.com/1668216

SO网友:t31os

你可以在那讨厌的wpautop 钩住并弄乱标记。

add_filter(\'the_content\', \'qanda\', 7 );
这样,当它挂起时,您已经转换了所需的内容,这在某些情况下确实有用。

SO网友:kater louis

与我之前的2个答案相同,但更新了regex,因为他的方法不适合我。

正则表达式:/<p>(?:\\s|&nbsp;)*?<\\/p>/i(非捕获组查找任意数量的空格或&nbsp;s在p-tag内,所有大小写均为INSTIVE。

add_filter(\'the_content\', function($content) {
    $content = force_balance_tags($content);
    return preg_replace(\'/<p>(?:\\s|&nbsp;)*?<\\/p>/i\', \'\', $content);
}, 10, 1);

SO网友:cwd

我觉得这很奇怪,但实际上the_content() 将以您描述的方式插入段落。如果您想要html代码,基本上就像您输入的一样(与编辑时的“查看html”相同),那么使用get_the_content() 返回不带格式和段落标记的内容。

既然它返回了它,请确保您使用以下内容:

echo get_the_content();
另请参见:http://codex.wordpress.org/Function_Reference/get_the_content

SO网友:user2914440

这将递归地从字符串中删除所有空html标记

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))<\\/\\1>/imsU\',

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

            //** Source string
           $str
);}
图案取自http://codesnap.blogspot.in/2011/04/recursively-remove-empty-html-tags.html

SO网友:Christian Isak

如果你有<p> 标记内容中有空格,请转到您的帖子或页面,并以非视觉样式对其进行编辑。

你会找到一些&nbsp; 在那里。。删除它并清空<p> 标签将消失。

SO网友:Shashank

为了只包含html内容,而不包含

标记我们可以使用以下循环只输出html,而不设置帖子或页面的格式

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_title(); ?>
<?php echo $post->post_content; ?>
<?php endwhile; endif; ?>

SO网友:pjk_ok

如果您得到的是空的<p> 标签位于页面或帖子顶部,这通常是由于<?php the_content();?> 在段落标记中。

PROBLEM

这就是导致流浪的原因<p> 页面/帖子顶部的标签:

<p><?php the_content();?></p>

SOLUTION

如果删除<p> 标签,并且只有模板标签,您将解决问题。

<?php the_content();?>

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s