博主最近在修改文章CSS后发现,由于很多样式被移动到了CSS文件中,所以在博文中出现了大量成对的<span>标签,未添加任何属性,类似于如下形式:
- <span>文字:一对标签</span>
- <span><span>文字:两对标签</span></span>
- <span><span><span>文字:三对标签</span></span></span>
以上三种单独或成对出现,看着确实不爽,也对SEO优化不太友好,所以需要把这些标签删除。
一、采用以下形式的代码:
- // 去掉未添加任何属性的标签
- function special_tag_remove( $content = '' ){
- if ( preg_match ( '/<span><span><span>(.*?)<\/span><\/span><\/span>/i', $content ) ) {
- $content = preg_replace( "/<span><span><span>(.*?)<\/span></span><\/span>/i", '$1', $content );
- }
- if (preg_match ( '/<span><span>(.*?)<\/span><\/span>/i', $content) ) {
- $content = preg_replace( "/<span><span>(.*?)<\/span><\/span>/i", '$1', $content );
- }
- if ( preg_match ('/<span>(.*?)<\/span>/i', $content) ) {
- $content = preg_replace( "/<span>(.*?)<\/span>/i", '$1', $content );
- }
- }
- add_filter( 'the_content', 'special_tag_remove', 10 );
以上代码在 WordPress 里面用,可以解决三重嵌套<span>标签的问题。需要将老文章刷新一下,后台文章不用改代码,如果有纯静态缓存,需要清空缓存。如果有四对标签,将上述代码改一改即可。以上代码也可以举一反三,套用到其他未添加任何属性的标签或者满足一些其他特殊用途。
当然,刷新文章页面的时候并未向数据库中写入上述数据,如果你想写入数据库,则需要将相应文章重新在可视化编辑模式下保存一下。
二、数据库命令操作
如果你想批量写入数据库中,本文的情况只能使用正则表达式,而使用字符串的表达式,如下面的两种方式不能实现:
在 WordPress 中:
- global $wpdb;
- $wpdb->query( "UPDATE wp_post SET post_content = replace( post_content, 'old', 'new' ) ");
或 在数据库中使用命令:
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
- UPDATE wp_posts SET post_content = REPLACE( post_content, 'old', 'new' );
MySQL 8.0.17 及以上版本才支持使用正则表达式:
- $wpdb->query('UPDATE wp_posts SET post_content = REGEXP_REPLACE( post_content, "正则表达式", "替换为的内容" )');
本文禁止住转载。任何形式转载请联系作者(时光在路上 www.timezls.com)。时光在路上保留所有权利
三、使用插件 Search Regex 进行搜索替换
Search Regex 这个 WordPress 插件的好处就是可以使用正则命令搜索、批量替换文章或数据库中其他地方的字符串。可以在 WordPress 官方页面下载该插件。
使用举例:
例如可以使用 /2016/08/([^>]+?).jpg
这样的命令批量替换 jpg 格式图片为 webp 格式图片: /2016/08/$1.webp
可以将 <span><a([^>]+?)>([^>]+?)</a></span>
中的<span>标签去掉: <a$1>$2</a>
以此类推,去掉其他形式的 <span> 标签。可根据具体情况而定。
本文禁止全文转载。任何形式转载请联系作者(时光在路上 www.timezls.com) Copyright © 2023. All Rights Reserved