多年来,WordPress 开发人员创建并维护了 WP-CLI — 一个专为 WordPress 操作而设计的强大命令行界面。作为一种省时工具,WP-CLI 尤其适合管理 WordPress 多站点网络,这种网络允许在一个 WordPress 安装上运行多个站点。
要有效使用 WP-CLI,必须了解 WordPress 的关键组件:管理界面、文件结构和数据库。如果不了解这些基础知识,WP-CLI 的效率和效益可能会大打折扣。
虽然 WP-CLI 支持安装、更新、激活、停用和删除插件或主题等标准命令,但它的功能远远超出了 WordPress 管理仪表板所能提供的范围,使其成为高级网站管理的多功能工具。
注:在多站点网络中,总有一个主站点(称为网络站点)是网络的锚点。其他网站(称为辅助网站)共享插件和主题,这些插件和主题在网络层面集中管理。超级管理员负责监督网络,确保所有网站的顺利运行。
本文将解释如何使用 WP-CLI 高效管理 WordPress 多站点网络,并提供实用示例帮助您入门。
什么是 WP CLI,为什么要使用它?
WP-CLI 是通过命令行管理 WordPress 网站的强大工具。在多站点环境中,它可以大大简化网络管理,使您能够执行批量操作并简化工作流程。
它的真正优势在于灵活性和可扩展性–你可以毫不费力地在整个网络或针对特定网站执行命令,同时还可以使用 GitHub 和其他软件仓库中的各种 WP-CLI 软件包来增强其功能。
开发人员经常创建自定义 WP-CLI 命令,以简化重复性任务。例如,你可以使用 WP-CLI 为主题和插件搭建模板代码,从而在开发过程中节省时间和精力。
开始之前
本文中强调的命令是根据 WordPress 多站点开发人员和管理员的使用频率精心挑选的。
WP-CLI 是一个广泛而灵活的工具,因此不可能涵盖所有可用的命令。为了保持清晰和实用,我们将重点放在简单、可操作的示例上,以帮助你入门。
由于 WP-CLI 基于 Unix 命令,你可能找不到与 WP-CLI 相对应的 Unix 命令。
关于 WP-CLI 的重要说明
WP-CLI 的命令结构非常灵活,可以通过多种方式实现相同的结果。例如,以下两个例子都是有效的:
wp user create johndoe johndoe@example.com --display_name="John Doe" --nickname="Johnny"
或:
wp user create johndoe --display_name="John Doe" johndoe@example.com --nickname="Johnny"
一旦命令和子命令被说明,标志、参数和值的顺序就不重要了。
运行 WP-CLI 命令的最佳实践
请遵循以下最佳实践,以避免潜在问题:
- 始终有可用的当前备份,尤其是其中一些命令会永久性地改变你的网站。
- 尽可能使用暂存网站。
- 使用
--dry-run
标志在应用数据库变更之前对其进行测试。
注:要跟上并有效使用 WP-CLI 管理 WordPress 多站点,请确保以超级管理员身份登录。虽然本指南侧重于插件命令,但同样的原则也适用于主题。此外,许多命令都支持 --yes
标志,允许你跳过确认提示并简化重复性任务。
WordPress 多站点管理的基本 WP-CLI 命令
多站点网络中的 WP-CLI 命令可以针对不同级别的操作:
全网范围:适用于网络中所有站点的命令。例如:
wp plugin deactivate --network --all
该命令会停用网络中每个站点的所有插件。
主站点:应用于多站点设置过程中创建的主站点的命令。例如
wp plugin list
上述命令仅列出主站点上安装的所有插件。
辅助站点:以网络中的单个站点为目标的命令,由其 URL 指定。例如
wp plugin update --url=mysite.example.com akismet
该命令更新网站mysite.example.com
上的 akismet
插件。
为了便于管理 Multisite 网络,我们将 WP-CLI 命令分为以下几部分:
基本命令
这些基本命令有助于排除故障和管理整个网络的插件和主题。
使用列表
WP-CLI 可以轻松检索多站点环境中的插件和其他组件列表。
获取网络中所有插件的列表:
wp plugin list --network
输出:显示所有网络安装的插件,包括名称、状态、可用更新和版本等详细信息。
按状态(如激活)过滤插件:
wp plugin list --network --status=active
输出:整个网络的活动插件表。
从主站点获取插件列表:
wp plugin list
输出:主站点的插件列表。
获取单个站点的活动插件列表:
wp plugin list --url=<site-url> --status=active
输入范例:
wp plugin list --url=blog.example.com --status=active
输出: 网站blog.example.com
的活动插件表。
除了用status=active
过滤插件外,还可以使用以下过滤器:
inactive
:已安装但未激活的插件。active-network
:在整个网络中激活的插件。must-use
:自动加载的必须使用的插件。
停用插件
在排除故障或准备更新时,通常需要停用插件。WP-CLI 允许你停用整个网络或特定网站的插件。
停用整个网络的所有插件:
wp plugin deactivate --network --all
结果:停用网络中的所有插件。
停用单个网站的特定插件:
wp plugin deactivate <plugin-slug-1> <plugin-slug-2> --url=<site-url>
输入范例:
wp plugin deactivate akismet hello-dolly --url=blog.example.com
结果:网站 blog.example.com
的 akismet
和 hello-dolly
插件已停用。
激活插件
在多站点设置中,使用这些命令激活整个网络或单个站点的插件。
激活整个网络的所有插件:
wp plugin activate --network --all
结果:激活网络中的所有插件。
激活单个网站的特定插件:
wp plugin activate <plugin-slug-1> <plugin-slug-2> --url=<site-url>
输入范例:
wp plugin activate akismet hello-dolly --url=blog.example.com
结果:blog.example.com
网站的akismet
和 hello-dolly
插件已激活。
安装插件
使用 WP-CLI 安装插件快捷高效。安装完成后,可为单个网站或整个网络激活插件。
可使用以下命令为网络安装插件:
wp plugin install <plugin-slug>
输入范例:
wp plugin install akismet
结果:插件 akismet
已安装并可激活。
更新插件
使用这些命令更新整个网络或特定网站的插件。
更新整个网络的所有插件:
wp plugin update --network --all
结果:更新网络中的所有插件。
更新整个网络中的特定插件:
wp plugin update <plugin-slug-1> <plugin-slug-2> --network
输入范例:
wp plugin update akismet jetpack bbpress --network
结果: 全网更新 akismet
、jetpack
和 bbpress
插件。
更新单个网站的插件:
wp plugin update --url=<site-url> <plugin-slug>
输入范例:
wp plugin update --url=blog.example.com hello-dolly
结果:更新了blog.example.com
网站的 hello-dolly
插件。
删除插件
使用 WP-CLI 删除插件非常简单,无论是单个网站还是多站点网络。
从当前 WordPress 上下文(网络或站点)中删除插件:
wp plugin delete <plugin-slug>
输入范例:
wp plugin delete bbpress
结果:删除 bbpress
插件。
删除多站点中特定站点的插件:
wp plugin delete <plugin-slug> --url=<site-url>
输入范例:
wp plugin delete bbpress --url=blog.example.com
结果: 删除 blog.example.com
网站上的 bbpress
插件。
网络管理
管理 WordPress 多站点网络中的站点是一项重要任务。以下是常用的 WP-CLI 命令,可帮助你高效地创建、管理和删除网站,以及处理缓存操作。
创建网站
使用 WP-CLI 向网络添加新网站非常简单。
基本命令:通过指定一个唯一的标签来创建一个新网站。
wp site create --slug=<site-name>
输入范例:
wp site create --slug=blog
结果:根据网络设置,创建一个新网站 blog.example.com
或 example.com/blog
并自动激活。
高级命令:也可以在命令中附加标志。在下面的示例中,添加的网站具有指定的网站标题和网站管理员。
wp site create --slug=<site-name> --title="<site-title>" --email=<admin-email>
输入范例:
wp site create --slug=blog --title="Blog Site" --email=admin@blog.com
结果: 创建名为“Blog Site”的网站,管理员为 admin@blog.com
。
列出所有网站: 检索显示网站 ID、URL、创建日期和最后更新日期的表格:
wp site list
您还可以调整网站列表,只获取网络中所有网站的 URL:
wp site list --field=url
输出:每个网站的 URL 列表。
清空和删除网站
注:清空命令将删除所有帖子、页面、链接和分类法,并保留网站外壳。
清空主站点:
wp site empty
输出:出现确认提示,删除主站点的所有内容。
清空单个网站(删除所有帖子、页面、链接和分类法):
wp site empty --url=<site-url>
输入范例:
wp site empty --url=blog.example.com
结果:删除 blog.example.com
中的所有内容,但网站保持不变。
清空网络中的所有网站:
wp site list --field=url | xargs -n1 -I % wp site empty --url=% --yes
结果:该命令会循环浏览所有 URL,然后清空每个站点的内容,无需为每个站点提供批准。
按 ID 删除单个网站:
wp site delete <site-id>
输入范例:
wp site delete 5
结果:ID 为 5
的站点已删除。
通过旁路确认删除多个站点:
wp site delete 2 --yes wp site delete 3 --yes
结果:ID 为 2
和 3
的站点被删除。--yes
标志有助于跳过提示。
清除缓存
由于许多缓存类型在这里以不同方式存储,部分服务器提供商还提供专业的插件支持,比如 Kinsta,使用 Kinsta Must-Use 插件。Kinsta 系统中的每个 WordPress 网站都会自动安装该插件。
这会清除所有缓存,包括网站缓存、边缘缓存、CDN 缓存和 Redis 缓存。
清除所有缓存(网站、边缘、CDN 和 Redis):
wp kinsta cache purge --all
只清除网站缓存:
wp kinsta cache purge --site
清除 CDN 缓存:
wp kinsta cache purge --cdn
清除对象缓存:
wp cache purge
用户管理
WP-CLI 简化了多站点环境中的用户管理,让你可以快速高效地执行任务。本节介绍常见的用户管理操作:
列出用户
使用 WP-CLI 可以直接列出网络或特定网站中的用户。
列出网络中的所有用户:
wp user list --network
输出:显示每个用户或用户列表查询的用户 ID、登录名、显示名、用户名、注册日期和角色的表格。
列出主站点的用户:
wp user list
结果:显示主站点的用户表。
列出特定站点(辅助站点)的用户:
wp user list --blog_id=<id> wp user list --url=<url>
输入范例:
wp user list --blog_id=6
结果:显示带有博客 ID 6
的网站所有用户表。
创建用户
在多站点网络中,用户默认注册为网络用户。他们的角色取决于他们是添加到网站的第一个用户还是后续用户。用户名必须至少有四个字符。
向主站点添加新用户:
wp user create <username> <email>
输入范例:
wp user create johndoe johndoe@example.com
输出:显示成功信息,包括生成的密码。
向特定网站添加新用户,并指定其角色:
wp user create <username> <email> --role=<role> --url=<url>
输入范例:
wp user create janedoe janedoe@example.com --role=editor --url=blog.example.com
输出:用户 janedoe
已作为“编辑器”添加到站点 blog.example.com
。
在创建过程中添加用户帐户元:
wp user create <username> <email> --display_name=<name> --nickname=<nickname>
输入范例:
wp user create johndoe johndoe@example.com --display_name="John Doe" --nickname="Johnny"
结果: 用户 johndoe
已创建,显示名为 John Doe
,昵称为 Johnny
。
注:要创建超级管理员,首先将用户添加为管理员,然后将该用户角色提升为超级管理员。
更新用户
使用 WP-CLI 可以快速更新用户信息,如角色或密码。
更改(晋升或降级)用户角色:
wp user update <username|email|user_id> --role=<role>
输入范例:
wp user update johndoe janedoe adminuser --role=super-administrator
结果:用户johndoe
、janedoe
和 adminuser
晋升为超级管理员。
重置或更改用户密码:
wp user update <username> --user_pass=<new_password>
输入范例:
wp user update johndoe --user_pass=securePassword2024
结果:johndoe
的密码已更新。
菊花链命令(Daisy-chained):WP-CLI 允许你在单个命令中组合多个操作,从而节省编辑用户的时间。例如,你可以同时更新用户的密码和角色。
wp user update <user> --user_pass=<new_password> --role=<status>
输入范例:
wp user update johndoe --user_pass="newPassword2024" --role=editor
结果:用户 johndoe
的密码更新为 newPassword2024
,角色更改为“编辑”。
管理用户元数据
通过用户元,可以添加、检索或删除用户账户的元数据。
获取用户元数据:
wp user meta get <username> <meta_key>
输入范例:
wp user meta get johndoe nickname
输出:显示用户johndoe
的 nickname
元键的值。
添加用户元:
wp user meta add <username> <meta_key> <meta_value>
输入范例:
wp user meta add johndoe display_name "Mr. John Doe"
结果:Mr. John Doe
被设置为用户johndoe
的显示名称。
删除用户元:
wp user meta delete <username> <meta_key>
输入范例:
wp user meta delete johndoe display_name
结果: 该命令将删除用户johndoe
的 display_name
元键。
删除用户
使用 WP-CLI 删除网络或特定网站中的用户非常有效。
从网络中删除用户:
wp user delete <username|user_id> --network
输入范例:
wp user delete johndoe --network
结果:从网络中删除用户 johndoe
。
从特定网站删除用户:
wp user delete <username|user_id> --url=<site-url>
输入范例:
wp user delete johndoe --url=mysite.example.com
结果: 从站点 mysite.example.com
删除用户 johndoe
。
数据库管理
WP-CLI 提供了一个强大的数据库管理工具,可以替代 phpMyAdmin 等工具。本节将介绍使用 WP-CLI 执行的常见数据库操作:
导出数据库
使用 WP-CLI 可以将数据库导出为 SQL 文件。导出的文件保存在 WordPress 安装的根目录中。
wp db export
结果:在根目录下创建一个 SQL 文件。
如果导出文件的名称不雅,可以使用以下命令重新命名:
wp eval 'if ( rename( "unganglyfilename.sql", "newfilename.sql" ) ) { echo "File renamed successfully."; } else { echo "Failed to rename file."; }'
输入范例:
wp eval 'if ( rename( "cilawawugo4504_gTr4kSXUsmJ9FNauVnPb-2024-11-17-9545b3f.sql", "network-db.sql" ) ) { echo "File renamed successfully."; } else { echo "Failed to rename file."; }'
结果:文件 cilawaw...nPb--9545b3f.sql
更名为 network-db.sql
。
下载数据库
要将导出的数据库文件下载到本地计算机,请使用 curl
命令。
curl <remote-url> -o <local-path>
输入范例:
curl example.com/network-db.sql -o ~/Downloads/network-db.sql
结果:文件 network-db.sql
已下载到本地的 Downloads
目录。
上传数据库
您可以使用scp
命令将数据库文件上传到 Multisite 安装的根目录。
scp <local-path-to-file> <username>@<remote-server>:<remote-path>
输入范例:
scp ~/Downloads/network-db.sql admin@example.com:/var/www/example.com/public_html
结果:验证后,文件 network-db.sql
将上传到 WordPress 安装的根目录。
导入数据库
在导入数据库之前,您可能需要重置现有的数据表。
注:重置数据库将禁用您的网站,因此请在暂存网站上执行此操作以避免中断。
重置数据表:
wp db reset
结果:清空数据库中的所有数据表。
导入数据库:
wp db import <file-name.sql>
输入范例:
wp db import network-db.sql
结果:文件 network-db.sql
将填充清空的数据表。
删除导入的 SQL 文件:为安全起见,请在导入后删除 SQL 文件:
rm <file-name.sql>
实用范例
我们可以想到很多命令来加快和简化您的工作流程。下面是三个例子。 虽然其中一些命令较为复杂,但它们都是在较简单的命令基础上执行有用的操作。
同时安装和激活插件并重新生成缩略图。
该命令循环浏览网络中的所有网站,安装并激活两个插件,并为每个网站重新生成图像缩略图。
wp site list --field=url | xargs -n1 -I % sh -c 'wp plugin activate <plugin slug> <plugin slug> --url=% && wp media regenerate --url=%'
输入范例:
wp site list --field=url | xargs -n1 -I % sh -c 'wp plugin install akismet bbpress --activate --url=% && wp media regenerate --url=%'
结果:在所有网站上安装并激活 Akismet
和 BBPress
插件,并重新生成图片缩略图。
为所有用户添加自定义元字段
此命令循环浏览所有网站,检索用户列表,并为每个用户添加自定义元字段。
wp site list --field=url | xargs -n1 -I % sh -c 'wp user list --fields=ID --url=% --format=csv | tail -n +2 | xargs -n1 -I {} wp user meta add {} <meta-key> <meta-value> --url=%'
输入范例:
wp site list --field=url | xargs -n1 -I % sh -c 'wp user list --fields=ID --url=% --format=csv | tail -n +2 | xargs -n1 -I {} wp user meta add {} favorite_color "" --url=%'
结果:为所有网站的所有用户添加一个自定义元字段 favorite_color
。
要显示 favorite_color
字段,需要使用 functions.php
文件或创建自定义插件。
将单个网站安装转换为多网站安装
WP-CLI 可以轻松地将独立 WordPress 网站转换为多站点网络。
wp core multisite-convert
结果:单一网站转换为多网站网络。
转换前,确保停用所有插件。
转换网站后,需要在 wp-config.php
文件中配置网络 URL。你可以选择使用子域(如 site.example.com)或子目录(如 example.com/site)。此外,请检查 .htaccess
文件,因为 URL 重写规则(由 Apache 的 mod_rewrite 模块处理)可能需要手动更新,以确保永久链接和网站结构正常工作。
小结
本指南重点介绍了 WP-CLI 在管理 WordPress 多站点环境方面的强大功能和灵活性,使其成为开发人员和管理员追求效率和控制的必备工具。从处理插件、用户和数据库到执行高级操作(如将单个网站转换为多站点),WP-CLI 可以精确、快速地简化复杂的任务。
评论留言