如何删除使用wpautop函数后多出的</p>HTML标签

导语:叶子开发一个主题代码的时候,发现文章中总是会在某个特定的代码后面加上</p>。在浏览器中显示出来的时候,就会平白无故多出一行,导致对出现排版问题问题。

wpautop函数导致现在的问题

当我们在主题的single.php使用the_content()函数输出文章内容的时候,这个函数会在输入文章内容的时候调用wpautop函数,wpautop功能将文章内容中的换行符转换成html标签<p></p>,两个换行符会转换为<p></p>,单个换行符转换为<br />。

这样转换出来的文章内容,会更加符合搜索引擎的规范。

如果你不希望文章内容在输出的时候使用wpautop函数,那么你可以使用以下的方法:

  • 在single.php中使用get_the_content()输出文章内容:echo get_the_content();
  • 在functions.php中使用remove_filter( ‘the_content’, ‘wpautop’ );

问题的表现

叶子把出现问题的代码贴上来,wpautop函数导致叶子写的主题代码输出的时候,在网页源代码</noscript>后面出现一个</p>,这个</p>在浏览器中会自动补全为<p></p>,这样就会平白无故多出一个空白行。

<noscript><img src="图片地址" alt="alt_img" /></noscript></p>

上面的源代码是可以通过浏览器的查看源代码的菜单打开,这样你就能看到当前网页的源代码。

叶子期望的代码为:

<noscript><img src="图片地址" alt="alt_img" /></noscript>

注意:<noscript></noscript>代码是为让内容中的图片延时加载后,又能够让图片被搜索引擎抓取到而设置的,实现代码如下:

add_filter('the_content', 'lazyload');
function lazyload($content)
{
    //默认图片
    $loadimg_url = '//placehold.it/300x150&text=wordpressleaf' );
    if (!is_feed() || !is_robots) {
        $content = preg_replace('/<img(.+)src=[\'"]([^\'"]+)[\'"](.*)\/>/i', "<img\$1data-original=\"\$2\" src=\"$loadimg_url\"\$3/><noscript>\$0</noscript>", $content);
    }
    return $content;
}

这段代码放在functions.php中就能实现突破的延时加载,当然,你还需要在前端使用jQuery来延时加载

解决问题

要解决叶子遇到的在</noscript>后面多出一个</p>的问题,其实很简单,就是在single.php中使用get_the_content()来输出内容,然后使用str_replace替换掉</p>,下面是具体实现代码。


/*the_content();*/
echo str_replace('</noscript></p>','</noscript>',get_the_content());

上面的代码,先屏蔽掉the_content()函数,或者直接删除the_content()。然后直接用echo get_the_content()来输出文章内容。

在使用上面的代码后,叶子的主题也就得到了想要的结果:

<noscript><img src="图片地址" alt="alt_img" /></noscript>

结束

你学会了吗?可以在下面留言来与叶子讨论。

发表评论

电子邮件地址不会被公开。 必填项已用*标注