雖然通過 WordPress 強大的插件庫,你幾乎可以干任何的事情,但是有時候需要快速修復一些特定的問題的時候,直接操作數據庫可能反而是方便的方法,所以這篇文章就給大家介紹 WordPress 數據庫維護時常用到 12 個 SQL 語句。
*注:下面假設 WordPress 數據庫的表的前綴都是默認的“wp_”。
1. 直接在數據庫中修改密碼
密碼忘記了是經常的事情,博客密碼忘記了進不去,可以直接在數據庫里面修改:
上面采用了 MySQL 的 MD5() 函數講密碼轉成 MD5 Hash。
2. 將日志從一個作者轉移到另外一個
假如你的博客的某個作者離開了,或者你不想讓“admin”作為作者名,想把日志的作者從一個改到另外一個:
*注:你需要知道兩個作者的 user id。
3. 刪除數據庫中日志修訂記錄和其相關的 post_meta 數據
特別是針對多人博客的時候,日志修訂功能很重要,但是日志修訂功能也在數據庫里面添加了很多的數據,假設你的博客只有 100 篇日志,每篇日志有 10 個日志修訂,你的 posts 表中就會有超過 1000 條記錄,嚴重的數據冗余:
*注:上面的 SQL 將刪除數據庫中所有的日志修訂記錄和其相關的 meta 信息(自定義字段)。
當然你還可以:徹底屏蔽日志修訂功能。
4. 批量刪除垃圾留言
如果你一段時間沒有管理你的博客,剛好出去休假,沒有辦法上網,并且博客也沒有裝類似 Akismet 這類防垃圾留言插件,那么你回來的時候,你會發現博客后臺有成千上萬條垃圾留言需要你去審核。 這個時候,其實你只需要審核通過正常的留言,然后執行下面這條 SQL:
5. 查找沒用的標簽
你可能創建一些 WordPress 標簽之后,就沒有再使用,你可以通過下面這條 SQL 找到它們,然后安全的刪除他們。
6. 查找和替換數據
對于熟悉 MySQL 數據庫的開發者來說,replace() 這個 MySQL 函數都應該很熟悉,它可以讓你指定一個字段,然后替換它里面的字符串,一旦執行,所有這個字段里面的字符串都會被替換。對于 WordPress 博客來說,這個 SQL 則非常實用,它可以讓你批量修改某些輸入錯誤,或者某個郵件地址等等。
替換日志內容中字符串:
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, 'http://oldurl.com', 'http://newurl.com' );留言者郵箱:
UPDATE wp_comments SET comment_author_email = REPLACE( comment_author_email, 'old-email@address.com', 'new-email@address.com' );還有一個 WordPress 插件 Search & Replace 還提供一個后臺讓你更加容易進行批量替換。
7. 獲取所有留言者的郵件地址
有時候你想做點不是那么好的事情,比如給所有留言者發下郵件,告訴他們你博客做了一些新的功能,或者寫了一個很不錯的文章,那么你干壞事情之前,首先要獲取所有留言者的郵件地址:
*注:上面的 DISTINCT 讓你獲取的郵件地址是唯一的,即使這個用戶發過好幾次留言,也不怕。
不過群發郵件這件事情個人建議還是不要這樣做好。
8. 一次把所有插件都停了
網站出現問題了,需要一次把插件全部都先停了之后檢測下:
9. 刪除所有標簽
有時候,你瘋了,想刪除博客所有的標簽,這個時候你不能單純的清空 wp_terms 表,因為 wp_terms 表同時存了分類和標簽的數據,這樣你就把分類信息也刪除了,這樣你就真的瘋了。
*注:上面 SQL 除了刪除標簽,還刪除了所有標簽和標簽和日志關聯的關系。
10. 列出沒用的 post meta
wp_postmeta 中的數據是由一些插件或者自定義字段生成的,他是對 wp_posts 表的一種無限的擴展,但是可能由于某種原因,日志被刪除了,但是它的 meta 信息還存在 wp_postmeta 表中,下面這條 SQL 將這些沒有關聯日志的 meta 數據列出:
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 含有特定字符串的留言
一些留言者很煩,一次留幾十個,其鏈接都指定到一些賣偉哥,起重機,SEO 的站點,煩人的很,一個一個刪,又累,下面這條 SQL 可以來幫忙:
簡單總結
這些 SQL 語句是直接對數據庫進行操作的,如果你不是那么懂數據庫或者 SQL 語言,建議你不要這么做,如果你還是比較自信 SQL 操作,建議操作之前備份下數據庫。
你在維護 WordPress 有什么常用的 SQL ,歡迎留言補充。