我有一个多站点安装和wp-cli设置和工作。最理想的是,我需要的是一个运行的脚本,它将生成多站点安装中所有站点的列表以及活动主题的名称。
我可以弄清楚如何在单站点上运行它,但我真正需要的是生成列表的能力。
我们的网络中有大约400多个网站,每周都在增长。还有人解决了这个问题吗?
<小时/> 更新:我现在已经开始工作了,但我觉得这可以更好地进行优化。
我将其保存为 list_active_themes.sh ,并通过运行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 "}"
答案 0 :(得分:2)
我们可以将任务拆分为两个基本操作:
wp site list
wp theme list
通过这些信息,我们可以获得网络中所有网站网址的列表:
wp site list --field=url
了解网站网址后,我们就能够列出相关的有效主题:
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
现在让我们返回我们自己的包含网站网址+主题名称的自定义列表,其结构如下:
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' ' '
用空格替换换行符,|tr -d '\n'
完全删除换行符。)
<强>更新强>
使用--format=count
选项将返回网站总数;我们可以将此值用作循环中的条件并生成类似JSON的结构(根据您的注释建议):
#!/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}"
上面的脚本将返回如下内容:
{
"site":{
"url":"http://site_one.dev/",
"theme":"theme_one"
},
"site":{
"url":"http://site_one.dev/",
"theme":"theme_two"
}
}