WordPress中get_the_archive_description函数返回值使用正则表达式去除p标签

导语:一般来说,我们可以使用strip_tags来去除html的标签,不过,叶子直接使用这个函数的时候,出现了小问题。测试环境和正式环境的get_the_archive_description返回结果不一样。测试环境的返回结果没有执行do_shortcode,可以先执行strip_tags,然后再执行do_shortcode。正式环境的返回结果执行了do_shortcode,当在正式环境中使用strip_tags的时候,所有的html标签都被去掉了。

去除头尾的p标签

需要去除头尾p标签的原因是它会造成这个主题排版的错乱。我们可以使用ltrim和rtrim来去除头尾的p标签。

$content ='<p>sss</p>';

//删除头的P标签
$content =ltrim($content,'<');
$content =ltrim($content,'p');
$content =ltrim($content,'>');

//删除尾的P标签
$content =rtrim($content,"\n");
$content =rtrim($content,">");
$content =rtrim($content,"p");
$content =rtrim($content,"/");
$content =rtrim($content,"<");

但使用trim有一个问题如果开头不是P标签而是其他标签的时候,会把尖括号也去掉,那么我们需要判断开头是否有P标签。

如果希望不判断,那么我们可以使用preg_replace函数来除去标签。

$content ='<p>sss</p>';

$content = preg_replace('/^<p>([\n\r\s\S]*)<\/p>[\n\r\s]*$/i', '$1', $content);

$content = preg_replace('/^<p>([\n\r\s\S]*)[\n\r\s]*$/i', '$1', $content);

$content = preg_replace('/^([\n\r\s\S]*)<\/p>[\n\r\s]*$/i', '$1', $content);

利用正则表达式做了三次查找替换,首先找头尾有完整P标签的,如果没有找到,再找头部是否存在不完整P标签的,最后,再找尾部是否存在不完整P标签的。

结束

这是叶子在开发主题过程中遇到的一个小问题,可能大家不会遇到,但因为遇到了,所以把过程写出来和大家一起讨论。

发表评论

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