我有一个多站点安装和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 "}"发布于 2016-01-14 01:52:44
我们可以将任务分成两个基本操作:
wp site listwp 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现在,让我们返回包含站点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' ' '用空格替换换行符,|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"
}
}https://stackoverflow.com/questions/33639478
复制相似问题