如何在沒有插件的情況下批量取消選擇帖子的類別

已發表: 2020-10-05

“類別”是 WordPress 中的默認分類法。 操作員可以使用類別將博客文章分類和分組到不同的部分。 類別還可以幫助訪問者更快地瀏覽網站,並了解您的網站的主題。 網站運營商可以使用 WordPress 管理面板實現對類別和帖子的基本操作,也可以使用 WordPress 插件以不同的方式操作帖子。

目錄隱藏
  1. 1.了解 WordPress 如何處理來自客戶端的 Web 請求?
  2. 2. WordPress 帖子批量操作的重要表格
  3. 3.將所有帖子從一個類別移動到另一個類別——使用 SQL 命令
    1. 3.1. 獲取屬於特定類別的所有帖子的 ID 列表
    2. 3.2. 獲取新類別的 ID
    3. 3.3. 使用給定的 ID 列表更新帖子
  4. 4.遺言

但是,過度使用 WordPress 網站的插件不應該是一種選擇,因為它可能會導致潛在的性能問題和安全問題。 在本文中,讓我們了解如何在不使用插件的情況下批量取消選擇帖子的類別

了解 WordPress 如何處理來自客戶端的 Web 請求?

了解 Web 服務器如何處理來自客戶端的請求是操作 WordPress 站點所必需的。 詳細操作包括批量取消選擇某個類別的帖子。

典型的 Web 服務器是 LAMP 堆棧(Linux – Apache – MySQL/MariaDB – PHP)。 在其他 Web 服務器平台中可以找到其他等效概念。

要批量取消選擇帖子,您應該了解 WordPress 如何處理請求。

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 篇文章被歸入“未分類”類別。

獲取包含 3 個帖子的 ID 列表以批量取消為它們選擇一個類別。

下面的 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 列表以批量取消選擇帖子的類別。

獲取新類別的 ID

 SET @newCategoryID = (
    	SELECT t.term_id FROM wp_terms t WHERE t.name='Inspirations'
);

驗證@newCategoryID的值:

獲取新的類別 ID,然後在批量取消選擇“未分類”類別後將帖子移至該類別。

使用給定的 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, ');'
);

其次,驗證一下:

驗證 SQL 命令以更新具有給定 ID 列表的帖子。

最後,使用以下語句發出存儲在@sqlCmd變量中的 SQL 命令:

 從@sqlCmd 準備 stmt;
SET SQL_SAFE_UPDATES = 0;
執行 stmt;
SET SQL_SAFE_UPDATES = 1;
解除分配準備 stmt;

結果如下:

批量取消選擇沒有插件的帖子類別的結果。

最後的話

有多種方法可以批量取消選擇 WordPress 網站中帖子的類別。 無論是使用插件通過 Web 界面進行交互,還是使用 SQL 命令對 WordPress 數據庫產生直接影響,操作員都應該了解正在修改的基本對象。

希望本文為您提供了更多選擇來批量取消選擇帖子類別。 為了在 WordPress 中獲得更多有用的技術,讓我們關注我們即將發布的文章!

如果您想使用插件更輕鬆地批量取消選擇帖子的類別,請參閱本文。