【问题标题】:WP-Cli Multisite ReportsWP-Cli 多站点报告
【发布时间】:2015-11-10 20:57:28
【问题描述】:

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

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

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


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

我将其保存为 list_active_themes.sh 并通过运行 sh list_active_themes.sh > active_themes.json 将其输出为 JSON 文件。

最后一部分是删除尾随逗号,它是下面第 9 行的结果——我不知道如何计算返回的 site 结果,以便执行 if 语句不输出逗号 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 "}"

【问题讨论】:

  • 我只是一个 bash 人,对 wp-cli 一无所知。但是,如果您可以对单个站点执行某些操作,那么您肯定可以在循环中对多个站点执行相同的操作。

标签: wordpress bash wp-cli


【解决方案1】:

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

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

【讨论】:

  • 感谢您的帮助!我在上面的问题中添加了更多内容
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2016-05-16
  • 2012-07-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多