停止WordPress自动显示<p> </p>标签

时间:2014-03-28 10:41:32

标签: php html css wordpress

Wordpress会在每个地方自动生成大量不需要的<p></p>标记。即使img标记也包含这些<p>标记。因此,它会在网站中创建不需要的空白区域。我尝试了很多方法来删除这些标签: -

preg_replace(array('<p>','</p>'),array('',''),the_content(),1);

remove_filter( 'the_content', 'wpautop' );

preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '\1\2\3', $content)

对我来说没什么用。首先我想知道为什么这些标签自动生成?我该如何解决这个问题?

7 个答案:

答案 0 :(得分:14)

Wordpress Visual Editor本身为新行创建了这些标记。

您可以尝试从the_excerptthe_content

中删除过滤器wpautop
remove_filter( 'the_content', 'wpautop' );
// OR
remove_filter( 'the_excerpt', 'wpautop' );

有时它不起作用(过去对我没用。不是用PHP)。

您可以尝试使用Javascript / jQuery,在加载DOM后或关闭</body>标记之前放置此代码。

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

将从整个文档中删除所有空<p></p>个元素。

答案 1 :(得分:5)

你可以尝试这个插件

http://wordpress.org/plugins/raw-html/

或者在主题的functions.php文件

中使用它
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );

答案 2 :(得分:2)

您需要在remove_filter挂钩中运行after_setup_theme功能。原因是它可能会在稍后被内容或摘录超越。所以你将使用以下函数

function remove_the_wpautop_function() {
    remove_filter( 'the_content', 'wpautop' );
    remove_filter( 'the_excerpt', 'wpautop' );
}

add_action( 'after_setup_theme', 'remove_the_wpautop_function' );

答案 3 :(得分:0)

有很多插件可以在WordPress中禁用autop,或者您可以使用以下过滤器来删除autop:

remove_filter( 'the_content', 'wpautop' );

但是,如果你需要从wp-editor设置样式和格式化内容,如果你删除了autop,你将无法这样做。

如果你想继续使用autop功能但想删除空p标签,可以使用jQuery来完成。

我可以使用以下代码删除不需要的空p标签:

jQuery(document).ready(function(){
    $ = jQuery; 
    $('p').each(function() {
    var $this = $(this);
    if($this.html().replace(/\s|&nbsp;/g, '').length == 0)
        $this.remove();
}); 

});

答案 4 :(得分:0)

进入WP admin的主题编辑区域。

将此代码添加到functions.php文件中,然后保存。

<?php
function my_formatter($content) {
    $new_content = '';
    $pattern_full = '{(\[raw\].*?\[/raw\])}is';
    $pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
    $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($pieces as $piece) {
        if (preg_match($pattern_contents, $piece, $matches)) {
            $new_content .= $matches[1];
        } else {
            $new_content .= wptexturize(wpautop($piece));
        }
    }

    return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'my_formatter', 99);
?>
  

现在,在撰写帖子/页面时,请使用[raw] [/ raw]标签来包围它   您不希望格式化的帖子/页面的部分。

OR

 <?php the_content(); ?>

并将其直接放在上方:

<?php remove_filter ('the_content', 'wpautop'); ?>

它应该是这样的:

<?php remove_filter ('the_content', 'wpautop'); ?>

<?php the_content(); ?>

答案 5 :(得分:0)

$content = preg_replace('#^<\/p>|<p>$#', '', $content);
echo do_shortcode($content);

我在短代码中使用它时尝试了它,它对我有用。

答案 6 :(得分:0)

我猜this会很好 -

function my_format_TinyMCE( $in ) {
  $in['wpautop'] = false;
  return $in;
}
add_filter( 'tiny_mce_before_init', 'my_format_TinyMCE' );