如何在没有插件的情况下批量取消选择帖子的类别
已发表: 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 中获得更多有用的技术,让我们关注我们即将发布的文章!
如果您想使用插件更轻松地批量取消选择帖子的类别,请参阅本文。
