WP-Cli多站点报告

时间:2015-11-10 20:57:28

标签: wordpress bash wp-cli

我有一个多站点安装和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 "}"

1 个答案:

答案 0 :(得分:2)

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

  1. 列出多站点安装中的所有站点:wp site list
  2. 获取主题列表:wp theme list
  3. 通过这些信息,我们可以获得网络中所有网站网址的列表:

    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"
        }
    }