鹿泽鹿泽  2024-07-24 15:13:42 鹿泽笔记 隐藏边栏  0 

虽然通过 WordPress 强大的插件库,几乎可以做任何的事情,但是有时候需要快速修复一些特定的问题的时候,直接操作数据库可能反而是方便的方法,所以这篇文章就给大家介绍 WordPress 数据库维护时常用到 SQL 语句。

*注:下面假设 WordPress 数据库的表的前缀都是默认的“wp_”。

1、直接在数据库中修改密码

密码忘记了是经常的事情,博客密码忘记了进不去,可以直接在数据库里面修改:

UPDATE 'wp_users' SET 'user_pass' = MD5('PASSWORD') WHERE 'user_login' ='admin' LIMIT 1;

上面采用了 MySQL 的 MD5() 函数讲密码转成 MD5 Hash。

2、将日志从一个作者转移到另外一个

假如博客的某个作者删掉了,或者不想让“admin”作为作者名,想把日志的作者从一个改到另外一个:

UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;

*注:需要知道两个作者的 user id 。

3、删除数据库中日志修订记录和其相关的 post_meta 数据

特别是针对多人博客的时候,日志修订功能很重要,但是日志修订功能也在数据库里面添加了很多的数据,假设博客只有 100 篇日志,每篇日志有 10 个日志修订, posts 表中就会有超过 1000 条记录,严重的数据冗余:

DELETE a,b,c FROM wp_posts a WHERE a.post_type = 'revision' LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);

*注:上面的 SQL 将删除数据库中所有的日志修订记录和其相关的 meta 信息(自定义字段)。

当然还可以:彻底屏蔽日志修订功能。

4、批量删除垃圾留言

如果有一段时间没有管理博客,并且博客也没有装类似 Akismet 这类防垃圾留言插件,那么可能会发现博客后台有成千上万条垃圾留言需要去审核。 这个时候,其实只需要审核通过正常的留言,然后执行下面这条 SQL:

DELETE from wp_comments WHERE comment_approved = '0';

5、查找没用的标签

可能创建一些 WordPress 标签之后,就没有再使用,可以通过下面这条 SQL 找到它们,然后安全的删除。

SELECT * From wp_terms wt INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy='post_tag' AND wtt.count=0;

6、查找和替换数据

对于熟悉 MySQL 数据库的开发者来说,replace() 这个 MySQL 函数都应该很熟悉,它可以让指定一个字段,然后替换它里面的字符串,一旦执行,所有这个字段里面的字符串都会被替换。对于 WordPress 博客来说,这个 SQL 则非常实用,它可以批量修改某些输入错误,或者某个邮件地址等。

替换日志内容中字符串:UPDATE table_name SET field_name = replace( field_name, 'string_to_find', 'string_to_replace' ) ;

将某个留言者地址替换下:UPDATE wp_posts SET post_content = replace( post_content, 'string_to_find', 'string_to_replace' ) ;

留言者邮箱:UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, '旧URL', '新URL' );
UPDATE wp_comments SET comment_author_email = REPLACE( comment_author_email, '旧邮箱地址', '新邮箱地址' );

还有一个 WordPress 插件 Search & Replace 还提供一个后台让我们更加容易进行批量替换。

7、获取所有留言者的邮件地址

比如给所有留言者发下邮件,告诉他们博客做了一些新的功能,或者写了一个很不错的文章,那么在做这些事情之前,首先要获取所有留言者的邮件地址:

SELECT DISTINCT comment_author_email FROM wp_comments;
*注:上面的 DISTINCT 获取的邮件地址是唯一的,即使这个用户发过好几次留言,也不用担心。

不过群发邮件这件事情个人建议还是不要这样做好。

8、一次把所有插件都停了

网站出现问题了,需要一次把插件全部都先停了之后检测下:

UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';

9、删除所有标签

有时候,想删除博客所有的标签,这个时候不能单纯的清空 wp_terms 表,因为 wp_terms 表同时存了分类和标签的数据,这样就把分类信息也删除了。

DELETE a,b,c
FROM
database.prefix_terms AS a
LEFT JOIN database.prefix_term_taxonomy AS c ON a.term_id = c.term_id
LEFT JOIN database.prefix_term_relationships AS b ON b.term_taxonomy_id = c.term_taxonomy_id
WHERE (
c.taxonomy = 'post_tag' AND
c.count = 0
);
*注:上面 SQL 除了删除标签,还删除了所有标签和标签和日志关联的关系。

10、列出没用的 post meta

wp_postmeta 中的数据是由一些插件或者自定义字段生成的,它是对 wp_posts 表的一种无限的扩展,但是可能由于某种原因,日志被删除了,但是它的 meta 信息还存在 wp_postmeta 表中,下面这条 SQL 将这些没有关联日志的 meta 数据列出:

SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;

11、关闭旧日志留言功能

对于一些技术博客或者其它博客来说,一些旧日志的内容可能已经过时了,那我们就需要把留言关了:

关闭留言:

UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2009-01-01' AND post_status = 'publish';

关闭Trackback:

UPDATE wp_posts SET ping_status="closed" WHERE post_date < '2009-01-01' AND post_status = 'publish';

12、删除所有 url 含有特定字符串的留言

一些留言者很烦,一次留几十个,一个一个删也不现实,下面这条 SQL 可以来帮忙:

DELETE from wp_comments WHERE comment_author_url LIKE "%viagra%" ;

这些 SQL 语句是直接对数据库进行操作的,如果不是那么懂数据库或者 SQL 语言,建议不要这么做,如果还是比较自信 SQL 操作,建议操作之前备份下数据库。

1、文章版权归作者所有,未经允许请勿转载。
2、本站所有文章,如无特殊说明或标注,均为本站原创发布。任何在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们邮箱:526009505@qq.com进行处理。
3、咨询请联系QQ:526009505