1

マルチサイト インストールと wp-cli のセットアップと動作が完了しました。必要なのは、マルチサイト インストール上のすべてのサイトのリストと、アクティブなテーマの名前を生成するスクリプトを実行することです。

これを 1 つのサイトで実行する方法は理解できますが、実際に必要なのはリストを生成する機能です。

ネットワーク内には約 400 以上のサイトがあり、毎週増えています。誰かがこの問題にまだ取り組んでいますか?


更新: これはほとんど機能していますが、これはより最適化できると思います。

これをlist_active_themes.shとして保存し、実行して JSON ファイルとして出力していますsh list_active_themes.sh > active_themes.json

最後の部分は、以下の9行目の結果である末尾のコンマを削除することです--そして、返さsiteれた結果をカウントする方法がわからず、ifステートメントを実行して、コンマが最後のものである場合にコンマを出力しないようにしますループ用。

これが私のコードです:

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

タスクを 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 に答える