如何在没有插件的情况下批量取消选择帖子的类别

已发表: 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 中获得更多有用的技术,让我们关注我们即将发布的文章!

如果您想使用插件更轻松地批量取消选择帖子的类别,请参阅本文。