1

我有一个多站点安装和 wp-cli 设置和工作。理想情况下,我需要的是一个运行脚本,它将生成多站点安装中所有站点的列表以及活动主题的名称。

我可以弄清楚如何在单个站点上运行它,但我真正需要的是生成列表的能力。

我们的网络中有大约 400 多个站点,并且每周都在增长。有没有人解决过这个问题?


更新:我现在大部分时间都在工作,尽管我觉得这可以更好地优化。

我将其保存为list_active_themes.sh并通过运行将其输出为 JSON 文件sh list_active_themes.sh > active_themes.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 "}"
4

1 回答 1

2

我们可以将任务拆分为两个基本操作:

  1. 列出多站点安装中的所有站点:wp site list
  2. 获取主题列表:wp theme list

有了这些信息,我们可以获得网络中所有站点 URL 的列表:

wp site list --field=url

知道站点 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

所以现在让我们返回我们自己的包含站点 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"
    }
}
于 2016-01-14T01:52:44.187 回答