如何在沒有插件的情況下批量取消選擇帖子的類別
已發表: 2020-10-05“類別”是 WordPress 中的默認分類法。 操作員可以使用類別將博客文章分類和分組到不同的部分。 類別還可以幫助訪問者更快地瀏覽網站,並了解您的網站的主題。 網站運營商可以使用 WordPress 管理面板實現對類別和帖子的基本操作,也可以使用 WordPress 插件以不同的方式操作帖子。
- 1.了解 WordPress 如何處理來自客戶端的 Web 請求?
- 2. WordPress 帖子批量操作的重要表格
- 3.將所有帖子從一個類別移動到另一個類別——使用 SQL 命令
- 3.1. 獲取屬於特定類別的所有帖子的 ID 列表
- 3.2. 獲取新類別的 ID
- 3.3. 使用給定的 ID 列表更新帖子
- 4.遺言
但是,過度使用 WordPress 網站的插件不應該是一種選擇,因為它可能會導致潛在的性能問題和安全問題。 在本文中,讓我們了解如何在不使用插件的情況下批量取消選擇帖子的類別。
了解 WordPress 如何處理來自客戶端的 Web 請求?
了解 Web 服務器如何處理來自客戶端的請求是操作 WordPress 站點所必需的。 詳細操作包括批量取消選擇某個類別的帖子。
典型的 Web 服務器是 LAMP 堆棧(Linux – Apache – MySQL/MariaDB – PHP)。 在其他 Web 服務器平台中可以找到其他等效概念。

LAMP 堆棧服務器-客戶端通信
1. 客戶端發送 HTTP 請求向 Web 服務器請求 Web 數據。
2. Web 服務器收到來自客戶端的有效 HTTP 請求(通過防火牆規則後):
- 分析 HTTP 請求的結構,確定客戶端需要的 HTML 頁面到底是什麼;
- 解析對腳本層 (PHP) 的請求。
3.腳本層PHP:
- 查詢數據庫,獲取所有必要的信息;
- 結合主題中的源代碼來呈現動態網頁;
- 返回到 Web 服務器。
4.網絡服務器:
- 構造 HTTP 響應消息。
- 向客戶端發送 HTTP 響應消息。
5. 客戶端從網絡服務器接收 HTTP 響應消息,然後在其網絡瀏覽器中顯示網絡數據。
WordPress 帖子批量操作的重要表格
WordPress 站點的數據庫架構中有一組表。 模式因站點而異。 但是,在操作 WordPress 站點的帖子時,這些表應該受到更高的關注:
| 表名 | 說明 |
wp_postmeta | 存儲 WordPress 站點的其他內容相關數據。 |
wp_post | 存儲 WordPress 站點的所有重要內容相關數據。 |
wp_term_relationships | 存儲將帖子連接到類別、標籤、鏈接的所有連接數據。 該表中的信息充當術語對象和術語之間的映射。 |
wp_term_taxonomy | 存儲wp_terms表的附加數據。 |
wp_term | 存儲類別、帖子標籤、頁面和鏈接。 |
將所有帖子從一個類別移動到另一個類別——使用 SQL 命令
為了直接操作WordPress數據庫,運營商需要決定使用哪個DBMS(數據庫管理系統)。 由於實驗室環境使用 LAMP 堆棧作為 Web 平台,操作員可以使用 phpMyAdmin、WordPress 插件甚至 MySQL 客戶端(終端命令)通過 SSH 會話來處理 WordPress 數據庫……在這種情況下,DBMS 是 MySQL WorkBench,以便更好地說明目的。
在對 WordPress 數據庫進行任何更改之前,建議對 WordPress 站點進行完整備份。 此完整備份包括 WordPress 源代碼(主題、PHP 文件……)和數據庫結構。 出於理想的目的,操作員可以創建運行 WordPress 站點的整個主機的完整備份。
以下是將所有帖子從“未分類”類別移動到“靈感”類別的完整 SQL 腳本。
設置@listID = (
SELECT GROUP_CONCAT(ID) FROM wp_posts
WHERE post_type="post"
AND post_status = "發布"
和 ID (
從 wp_term_relationships 中選擇 object_id
WHERE term_taxonomy_id IN (
從 wp_term_taxonomy 中選擇 term_taxonomy_id
WHERE 分類法 = "類別"
AND term_id IN (
從 wp_terms t 中選擇 t.term_id
WHERE t.name="未分類"
)
)
)
);
SET @newCategoryID = (
SELECT t.term_id FROM wp_terms t WHERE t.name='Inspirations'
);
選擇@newCategoryID;
設置@sqlCmd = CONCAT(
'更新 wp_term_relationships tr ',
'SET tr.term_taxonomy_id = ', @newCategoryID , ' ',
'WHERE tr.object_id IN (', @listID, ');'
);
選擇@sqlCmd;
從@sqlCmd 準備 stmt;
SET SQL_SAFE_UPDATES = 0;
執行 stmt;
SET SQL_SAFE_UPDATES = 1;
解除分配準備 stmt;下面將解釋詳細的腳本。

獲取屬於特定類別的所有帖子的 ID 列表
在此演示中,我們將演示如何從“未分類”類別中批量取消選擇所有帖子,然後將它們移至名為“靈感”的新類別。
在 WordPress 管理面板中,這 3 篇文章被歸入“未分類”類別。

下面的 SQL 命令將檢索名為“未分類”的類別的所有帖子 ID。
設置@listID = (
SELECT GROUP_CONCAT(ID) FROM wp_posts
WHERE post_type="post"
AND post_status = "發布"
和 ID (
從 wp_term_relationships 中選擇 object_id
WHERE term_taxonomy_id IN (
從 wp_term_taxonomy 中選擇 term_taxonomy_id
WHERE 分類法 = "類別"
AND term_id IN (
從 wp_terms t 中選擇 t.term_id
WHERE t.name="未分類"
)
)
)
); 驗證@listID的值:

獲取新類別的 ID
SET @newCategoryID = (
SELECT t.term_id FROM wp_terms t WHERE t.name='Inspirations'
); 驗證@newCategoryID的值:

使用給定的 ID 列表更新帖子
首先,構建一個 SQL 命令並將其存儲在變量@sqlCmd 。
/* 存儲在變量@sqlCmd 中的預期命令:
更新 wp_term_relationships tr
設置 tr.term_taxonomy_id = 5
WHERE tr.object_id IN (131,132,133);
*/
設置@sqlCmd = CONCAT(
'更新 wp_term_relationships tr ',
'SET tr.term_taxonomy_id = ', @newCategoryID , ' ',
'WHERE tr.object_id IN (', @listID, ');'
);其次,驗證一下:

最後,使用以下語句發出存儲在@sqlCmd變量中的 SQL 命令:
從@sqlCmd 準備 stmt; SET SQL_SAFE_UPDATES = 0; 執行 stmt; SET SQL_SAFE_UPDATES = 1; 解除分配準備 stmt;
結果如下:

最後的話
有多種方法可以批量取消選擇 WordPress 網站中帖子的類別。 無論是使用插件通過 Web 界面進行交互,還是使用 SQL 命令對 WordPress 數據庫產生直接影響,操作員都應該了解正在修改的基本對象。
希望本文為您提供了更多選擇來批量取消選擇帖子類別。 為了在 WordPress 中獲得更多有用的技術,讓我們關注我們即將發布的文章!
如果您想使用插件更輕鬆地批量取消選擇帖子的類別,請參閱本文。
