WP-Cli 多站点报告
WP-Cli Multisite Reports
我已经安装了多站点并且设置了 wp-cli 并且可以正常工作。最理想的是,我需要的是 运行 的脚本,它将生成多站点安装中所有站点的列表以及活动主题的名称。
我可以弄清楚如何在单个站点的基础上运行,但我真正需要的是生成列表的能力。
我们的网络中有大约 400 多个站点,而且每周都在增加。有人解决过这个问题吗?
更新:虽然我觉得这可以更好地优化,但我现在大部分时间都在使用它。
我将其保存为 list_active_themes.sh 并通过 运行ning sh list_active_themes.sh > active_themes.json
将其输出为 JSON 文件.
最后一块是删除作为下面第 9 行结果的尾随逗号——我不知道如何计算返回的 site
结果以便执行 if 语句不输出如果它是 for 循环中的最后一个逗号。
这是我的代码:
echo "{"
for site in $(wp site list --domain=sample.domain.com --field=url --quiet)
do
echo -e '\t"site":{'
printf '\t\t"url":"%s",\n' "$site"
echo -e '\t\t"theme":"'|tr '\n' ''
wp theme list --status=active --field=name --url=$site|tr '\n' ''
echo '"'
echo -e '\n\t},'
done
echo "}"
我们可以将任务拆分为两个基本操作:
- 列出多站点安装中的所有站点:
wp site list
- 获取主题列表:
wp theme list
根据这些信息,我们可以获得网络中所有站点 URL 的列表:
wp site list --field=url
了解站点 URL,我们能够列出相关的 active 主题:
wp theme list --status=active --url="<site_url>"
现在我们可以设置一个基本的 bash 脚本来遍历网络中的每个站点并获取关联的主题:
#!/bin/bash
for site in $(wp site list --field=url)
do
wp theme list --status=active --url=$site
done
将其保存到文件(例如 list_active_themes.sh
)并从终端 运行 保存它:
sh list_active_themes.sh
现在让我们 return 我们自己的自定义列表,其中包含站点 URL + 主题名称,其结构如下:
Site: <site_url> Theme: <theme_name>
相应的 bash 脚本可能如下所示:
#!/bin/bash
for site in $(wp site list --field=url)
do
echo Site:|tr '\n' ' '
echo $site|tr '\n' ' '
echo Theme:|tr '\n' ' '
wp theme list --status=active --field=name --url=$site
done
(表达式 |tr '\n' ' '
replaces the newline with a space, |tr -d '\n'
完全删除换行符。)
更新:
使用--format=count
选项将return站点总数;我们可以将此值用作循环中的条件并生成 JSON-like 结构(如您的评论所建议):
#!/bin/bash
COUNTER=1
SITES=$(wp site list --format=count)
echo "{"
for site in $(wp site list --field=url)
do
echo '\t"site":{'
printf '\t\t"url":"%s",\n' "$site"
echo '\t\t"theme":"'|tr -d '\n'
wp theme list --status=active --field=name --url=$site|tr -d '\n'
echo '"'
echo '\n\t}'|tr -d '\n'
if (($COUNTER != $SITES)); then
echo ,
fi
COUNTER=$[$COUNTER +1]
done
echo "\n}"
上面的脚本会return像这样:
{
"site":{
"url":"http://site_one.dev/",
"theme":"theme_one"
},
"site":{
"url":"http://site_one.dev/",
"theme":"theme_two"
}
}
我已经安装了多站点并且设置了 wp-cli 并且可以正常工作。最理想的是,我需要的是 运行 的脚本,它将生成多站点安装中所有站点的列表以及活动主题的名称。
我可以弄清楚如何在单个站点的基础上运行,但我真正需要的是生成列表的能力。
我们的网络中有大约 400 多个站点,而且每周都在增加。有人解决过这个问题吗?
更新:虽然我觉得这可以更好地优化,但我现在大部分时间都在使用它。
我将其保存为 list_active_themes.sh 并通过 运行ning sh list_active_themes.sh > active_themes.json
将其输出为 JSON 文件.
最后一块是删除作为下面第 9 行结果的尾随逗号——我不知道如何计算返回的 site
结果以便执行 if 语句不输出如果它是 for 循环中的最后一个逗号。
这是我的代码:
echo "{"
for site in $(wp site list --domain=sample.domain.com --field=url --quiet)
do
echo -e '\t"site":{'
printf '\t\t"url":"%s",\n' "$site"
echo -e '\t\t"theme":"'|tr '\n' ''
wp theme list --status=active --field=name --url=$site|tr '\n' ''
echo '"'
echo -e '\n\t},'
done
echo "}"
我们可以将任务拆分为两个基本操作:
- 列出多站点安装中的所有站点:
wp site list
- 获取主题列表:
wp theme list
根据这些信息,我们可以获得网络中所有站点 URL 的列表:
wp site list --field=url
了解站点 URL,我们能够列出相关的 active 主题:
wp theme list --status=active --url="<site_url>"
现在我们可以设置一个基本的 bash 脚本来遍历网络中的每个站点并获取关联的主题:
#!/bin/bash
for site in $(wp site list --field=url)
do
wp theme list --status=active --url=$site
done
将其保存到文件(例如 list_active_themes.sh
)并从终端 运行 保存它:
sh list_active_themes.sh
现在让我们 return 我们自己的自定义列表,其中包含站点 URL + 主题名称,其结构如下:
Site: <site_url> Theme: <theme_name>
相应的 bash 脚本可能如下所示:
#!/bin/bash
for site in $(wp site list --field=url)
do
echo Site:|tr '\n' ' '
echo $site|tr '\n' ' '
echo Theme:|tr '\n' ' '
wp theme list --status=active --field=name --url=$site
done
(表达式 |tr '\n' ' '
replaces the newline with a space, |tr -d '\n'
完全删除换行符。)
更新:
使用--format=count
选项将return站点总数;我们可以将此值用作循环中的条件并生成 JSON-like 结构(如您的评论所建议):
#!/bin/bash
COUNTER=1
SITES=$(wp site list --format=count)
echo "{"
for site in $(wp site list --field=url)
do
echo '\t"site":{'
printf '\t\t"url":"%s",\n' "$site"
echo '\t\t"theme":"'|tr -d '\n'
wp theme list --status=active --field=name --url=$site|tr -d '\n'
echo '"'
echo '\n\t}'|tr -d '\n'
if (($COUNTER != $SITES)); then
echo ,
fi
COUNTER=$[$COUNTER +1]
done
echo "\n}"
上面的脚本会return像这样:
{
"site":{
"url":"http://site_one.dev/",
"theme":"theme_one"
},
"site":{
"url":"http://site_one.dev/",
"theme":"theme_two"
}
}