导语:叶子开发一个主题代码的时候,发现文章中总是会在某个特定的代码后面加上</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>
结束
你学会了吗?可以在下面留言来与叶子讨论。