在使用 WordPress 的过程中,某些时候需要修正一些数据库方面的问题。相比之下,直接在数据库中执行查询语句是最便捷的。在这里,提供了 14 条非常实用的查询语句,可以帮助遇到类似问题的用户解决相应的问题。
如何执行 MySQL 查询语句
通常情况下,我们可以直接进入服务器的 MySQL 命令行中执行。也可以使用非常著名的 WEB 程序 PHPMyAdmin 进行查询。如果我们想在 WordPress 后台直接进行查询,还可以使用 SQL Executionner 这个插件对数据库进行操作。
注意:虽然以下提供的查询语句都已经经过测试。但是请不要直接在生产环境下运行,或者经过一定的测试再执行,毕竟每个人的站点环境 可能略有不同。操作之前切记要对数据库进行备份操作。
1. 手动修改密码
某些情况下,我们忘记了管理员的密码。或者站点遭受攻击后,管理员密码被恶意修改了。这个时候,我们能做的就只有重新设置管理员的密码了。
以下查询语句,使用 MySQL 的 MD5() 函数将我们的密码进行 MD5 加密。
UPDATE 'wp_users' SET 'user_pass' = MD5('PASSWORD') WHERE 'user_login' ='admin' LIMIT 1;
来源:http://www.wprecipes.com/how-to-manually-reset-your-wordpress- password
2. 批量转换日式的作者
大多数刚使用 WordPress 的人可能都是直接使用 “admin”这个用户来直接发布日志。等您新建一个用户后,如果想将原来日志的作者批量修改为新用户的时候,可以使用以下查询语句。
在执行之前,您需要知道老用户和新用户的用户 ID。
UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=OLD_AUTHOR_ID;
来源:http://www.wprecipes.com/how-to-change-author-attribution-on-all- posts-at-once
3. 删除日志修订版本和其相关的信息
日志的修订版本功能在多用户共同维护一个博客的时候非常有用。不过该功能在数据库中添加过多的记录数也是很让人恼火的。
执行以下语句,可以将数据库中的日志修订版本记录以及其中的其他信息(包括自定义区域等等)删除掉。执行后,会节省很多数据库空间。
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);
来源:http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql- queries-you-wish-you-knew-earlier/
4. 批量删除垃圾评论
在您的博客没有安装 Akismet 或其他替代品的前提下,一段时间没有进入后台进行评论审核。可能会出现几百甚至上千条未审核的评论。而且大部分可能是垃圾评论。这个时候,如果您在后台进 行删除,可能会浪费掉您很多时间。以下语句可以在数据库中批量删除掉所有未审核的评论。
奉劝一句,还是安装 Akismet 或类似的插件吧,可以省却您很多烦恼。
DELETE from wp_comments WHERE comment_approved = '0';
来源:http://www.wprecipes.com/mark-asked-how-to-batch-deleting-spam- comments-on-a-wordpress-blog
5. 查找未使用的标签
标签的记录是存放在 wp_terms 这个数据表中的。有时,可能部分标签创建了但是没有被使用,他们仍然会在数据表中。以下语句可以对这些未使用的标签进行查询,您可以安全的将其删除。
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;
来源:http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql- queries-you-wish-you-knew-earlier/
6. 查找并替换数据
该语句不光是在 WordPress 的使用过程中能用到。您可以在很多地方用到该 MySQL 查询语句。其使用 MySQL 的 replace() 函数将一段字符串替换成您指定的另一段字符串。
UPDATE table_name SET field_name = replace( field_name, 'string_to_find', 'string_to_replace' ) ;
来源:http://perishablepress.com/press/2007/07/25/mysql-magic-find-and- replace-data/
7. 获得发表评论访问者的电子邮箱地址列表
该语句可以返回一个在您博客上进行评论的用户的电子邮箱地址列表。语句中的 DISTINCT 参数用来保证每个电子邮箱地址只显示一次。
SELECT DISTINCT comment_author_email FROM wp_comments;
来源:http://www.onextrapixel.com/2010/01/30/13-useful-wordpress-sql- queries-you-wish-you-knew-earlier/
8. 一次性禁用掉所有插件
虽然新版的 WordPress 已经可以直接在后台对插件进行批量的启用和禁用操作。但是当某些插件引起整个站点不能正常访问的时候,我们就可以使用以下语句禁用掉站点内所有的插件,然 后再进入到 WordPress 后台进行调试操作。
UPDATE wp_options SET option_value = '' WHERE option_name = 'active_plugins';
来源:http://www.wprecipes.com/how-to-disable-all-your-plugins-in-a- second
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 );
来源:http://wordpress.org/support/topic/311665
10. 列举无用的日志信息
日志的 Meta 信息通常是由插件或自定义区域建立的。它们非常实用,但也会让您的数据库尺寸快速的变得臃肿。以下语句会显示 postmeta 表中那些没有在 post 表有对应关系的记录,便于您对数据库进行清理。
SELECT * FROM wp_postmeta pm LEFT JOIN wp_posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;
来源:http://wordpress.org/support/topic/337412
11. 禁用老日志的评论功能
某些时候,您希望把以前的日志评论功能关闭掉。可能导致您这么作出决定的原因有很多,您可以使用以下语句将指定日期之前发布的日志评论功能关闭掉。
UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2009-01-01' AND post_status = 'publish';
来源:http://perishablepress.com/press/2008/02/20/wordpress-discussion- management-enable-or-disable-comments-and-pingbacks-via-sql/
12. 替换评论者的链接
上文提到了 MySQL 的 replace() 函数。该条语句就是一个很好的例子。如果您的站点域名发生了改变,您可以使用该语句将您在自己站上发表的评论中的链接批量替换为新的域名。
UPDATE wp_comments SET comment_author_url = REPLACE( comment_author_url, 'http://oldurl.com', 'http://newurl.com' );
来源:http://perishablepress.com/press/2008/07/14/wordpress-link-author- comments-home-page/
13. 替换评论者的电子邮箱地址
和上一条差不多,批量替换掉电子邮箱地址。
UPDATE wp_comments SET comment_author_email = REPLACE( comment_author_email, 'old-email@address.com', 'new-email@address.com' );
来源:http://perishablepress.com/press/2008/05/18/wordpress-tip-update- email-address-in-the-wordpress-database
14. 删除包含指定链接的评论
某些垃圾评论发布者还是很会钻空子的。经常发布一些貌似与文章相关的评论,可评论内容中通常包含恶意网站的链接。等你发现的时候,可能这样的评论已 经很多了。使用以下代码,可以方便的将包含指定链接地址的评论一次性删除掉。
DELETE from wp_comments WHERE comment_author_url LIKE "%wpbeginner%" ;
原文地址:10+ life saving SQL queries