首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

WordPress MySQL 批量操作實戰指南:常用 SQL 語句大全與避坑指南

     編輯:PHP 綜合知識

當 WordPress 站點文章、評論、用戶達到成百上千時,後台逐筆編輯不僅低效、易出錯。直接操作 MySQL 資料庫配合精準 SQL,能在秒級完成批量修改。本文整理實戰高頻 SQL,**務必先完整備份資料庫**再執行。

核心原則

  • 先備份:使用 mysqldump、備份外掛(UpdraftPlus、WPvivid)或主機面板匯出 .sql
  • 前綴確認:預設 wp_,實際請查 wp-config.php 中 $table_prefix
  • 先 SELECT 再 UPDATE/DELETE:驗證影響範圍,確認無誤才執行寫入
  • 測試環境先行:複刻正式站到 Staging 環境驗證

高頻批量操作 SQL 分類彙總

1. 自訂欄位批量新增/刪除

-- 為所有文章/頁面新增自訂欄位(避免重複)
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID, 'custom_field_key', 'custom_value'
FROM wp_posts
WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'custom_field_key')
  AND post_type IN ('post','page'); -- 或只針對 'post' / 'page'

-- 刪除特定 meta_key(如移除外掛殘留資料)
DELETE FROM wp_postmeta WHERE meta_key = 'obsolete_plugin_key';

2. 評論管理

-- 批量刪除垃圾評論
DELETE FROM wp_comments WHERE comment_approved = 'spam';

-- 批量刪除待審評論
DELETE FROM wp_comments WHERE comment_approved = '0';

-- 刪除含特定網址的評論(垃圾鏈接清理)
DELETE FROM wp_comments WHERE comment_author_url LIKE '%spamdomain.com%';

-- 關舊文章評論(指定日期前)
UPDATE wp_posts SET comment_status = 'closed'
WHERE post_date < '2023-01-01' AND post_status = 'publish';

3. Pingback/Trackback 控制

-- 全站啟用/停用
UPDATE wp_posts SET ping_status = 'open';  -- 或 'closed'

-- 指定日期前停用
UPDATE wp_posts SET ping_status = 'closed'
WHERE post_date < '2023-01-01' AND post_status = 'publish';

4. 文章/頁面類型轉換

-- 文章 → 頁面
UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post';

-- 頁面 → 文章
UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page';

5. 作者歸屬變更

-- 先查詢用戶 ID
SELECT ID, display_name FROM wp_users;

-- 批量變更作者(NEW_ID 為新作者,OLD_ID 為舊作者)
UPDATE wp_posts SET post_author = NEW_ID WHERE post_author = OLD_ID;

6. 修訂版本清理(釋放資料庫空間)

-- 刪除所有修訂版
DELETE FROM wp_posts WHERE post_type = 'revision';

-- 進階:保留最近 N 版,刪除較舊修訂(需子查詢或程式碼迭代)

7. 短代碼/內容批量替換

-- 移除廢棄短代碼 [tweet]
UPDATE wp_posts SET post_content = REPLACE(post_content, '[tweet]', '');

-- 通用搜尋替換(網址遷移、圖片 CDN 域名變更等)
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://old-domain.com', 'https://new-domain.com');

-- 修正圖片 src 路徑
UPDATE wp_posts SET post_content = REPLACE(post_content, 'src="https://old.com', 'src="https://new.com');

8. 網址遷移三部曲(搬家必做)

-- 1. 站點設定
UPDATE wp_options
SET option_value = REPLACE(option_value, 'https://old-site.com', 'https://new-site.com')
WHERE option_name IN ('home','siteurl');

-- 2. GUID(永久連結識別符,通常不建議改,除非全新站點)
UPDATE wp_posts SET guid = REPLACE(guid, 'https://old-site.com', 'https://new-site.com');

-- 3. 文章內容內部連結/圖片
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://old-site.com', 'https://new-site.com');

9. 安全相關

-- 修改預設管理員用戶名(防暴力破解)
UPDATE wp_users SET user_login = 'NewAdminName' WHERE user_login = 'admin';

-- 重設密碼(MD5,WP 登入時會自動升級為 phpass)
UPDATE wp_users SET user_pass = MD5('NewStrongPassword123!') WHERE user_login = 'YourUserName';

10. 清理無用分類/標籤

-- 查找無文章關聯的標籤
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;

-- 刪除(謹慎,建議先備份)
DELETE wt, wtt, tr FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id = wtt.term_id
LEFT JOIN wp_term_relationships tr ON wtt.term_taxonomy_id = tr.term_taxonomy_id
WHERE wtt.taxonomy = 'post_tag' AND wtt.count = 0;

11. 停用/啟用所有外掛(後台進不去時救命)

UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';

避坑指南

操作風險緩解
REPLACE 內容替換誤替換非目標字串(如域名片段出現在非連結處)先 SELECT 驗證,或用正則/程式碼精準處理
刪除修訂版無法復原歷史內容確認不需版本控制才刪;或保留最近 N 版
修改 GUIDRSS 讀者視為新文章、重複推送僅全新站點遷移時修改,運行中站點勿動
批量改作者關聯的作者封存頁、權限異動同步檢查 capabilities、封存頁重導

工具推薦

  • WP-CLI:wp search-replace、wp post delete、wp user update 等指令比手寫 SQL 更安全、支援序列化資料處理
  • Adminer / phpMyAdmin:圖形介面執行 SQL、匯出備份
  • Better Search Replace 外掛:後台可視化搜尋替換、支援序列化欄位、乾跑模式

掌握這些 SQL,配合備份與驗證習慣,能讓 WordPress 站點維護效率提升數十倍。記住:**資料庫無悔藥,備份是最大的底氣。**

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved