短代码作为WordPress常用的功能,基本每个主题多多少少都会有点,但是有些时候,发布的文章多了,哪些文章使用了短代码我们并不知道,也不可能每篇文章去排查用了哪些短代码。等到你忘记的时候,删除了某个短代码。可能就会出现下面的这种尴尬的界面:
虽然你删除了短代码,但是文章内容中的文本并不会消失,只不过会被直接输出,就是上面图片的那种,虽然这样的内容对于文章的阅读可能影响不会很大也不会造成阅读上面的困难,怕的就是某些强迫症患者或者对于WordPress有洁癖的朋友会崩溃会疯掉,为了解决这样的问题,也有大神给出了相关的解决方案。
首先我们模拟一种有效和失效的同时存在的情况:
可以看到,红色部分对应的代码已经标出了,证明短代码是可以正常输出的,而下面同样是短代码格式,但是被直接输出,说明下面的代码是失效的。
那么使用了代码之后的效果如下:
我们可以看到的就是原本生效的代码依然正常展示,但是失效的代码已经被隐藏了,效果看上去还是不错的,不过换句话说,这样也只是障眼法,正所谓眼不见心不烦,如果你还有更强的强迫症,务必要删除文章里面的内容,那么处理最安全的方式就是通过人工处理了。
代码如下:
add_filter( 'the_content', 'remove_unused_shortcode' ); function remove_unused_shortcode( $content ) { $pattern = get_unused_shortcode_regex(); return preg_replace_callback( '/' . $pattern . '/s', 'strip_shortcode_tag', $content ); } function get_unused_shortcode_regex() { global $shortcode_tags; $tagnames = array_keys( $shortcode_tags ); $tagregexp = implode( '|', array_map( 'preg_quote', $tagnames ) ); $regex = '\[(\[?)'; $regex .= "(?!$tagregexp)"; $regex .= '\b([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]*+(?:\[(?!\/\2\])[^\[]*+)*+)\[\/\2\])?)(\]?)'; return $regex; }
代码方面直接添加到主题目录下function.php文件目录中最后一个?>之前即可,有兴趣的朋友可以自己去尝试下一下。
上面的方法只是告诉你如何隐藏说是让你看不到短代码,但是真的想要移除的话,最终的办法是离不开手动去数据库删除的。
当然,如果你的短代码功能一开始都是自己写的,比如本站的短代码,一旦我删除某个短代码功能,那么想要删除所有相关短代码的内容可能只需要一句SQL,否则就需要一点点的去删除了。