web-dev-qa-db-ja.com

マルチサイト上の各サイトに対してWP-CLI @aliasを生成する

@ aliases を自動生成したいマルチサイトがいくつかあり、それぞれにいくつかのサイトがあります。私の サイトリスト でエイリアスとしてそれらのサイトを同期する方法はありますか?

私は--url=http://domain.com/sub-site/を指定する必要なしに単一のサイトをターゲットにすることができて、URLの最後の部分を使用することが エイリアス のための実行可能な名前のように思えます。

$ wp site list
+---------+----------------------------------------+---------------------+---------------------+
| blog_id | url                                    | last_updated        | registered          |
+---------+----------------------------------------+---------------------+---------------------+
| 1       | http://domain.com/sub-site/            | 0000-00-00 00:00:00 | 2020-01-00 04:20:00 | 
+---------+----------------------------------------+---------------------+---------------------+


$ wp cli alias
---
@all: Run command against every registered alias.
@sub-site:
  url: http://domain.com/sub-site/
  path: /www/wordpress


$ wp @sub-site theme list
---
...

私は助けることができる以下のコマンドを見つけることができるだけです。

現在のエイリアスを表示します。

$ wp cliエイリアス

すべてのサイトを表示

$ wpサイトリスト--field = url


(理想的)エイリアスを自動生成します。

$ wpサイトエイリアス

$ wp cli alias --generate


どのような解決策であれ、それはそのサイトのWordPressへのpath:を含み、(オプションで)~/.wp-cli/config.ymlにまだ追加されていないユニークなエイリアスを生成できるようにするべきです。


WIP

home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url | sort); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@$alias_name:\n url: $site\n path: $home\n"; fi; done;

またはpath=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); wp site list --field=url | sort | cut -d '/' -f4 | xargs -I '{}' echo -e "@{}:\n url: $url/{}\n path: $path\n"

| sort | sed -r "s#($url)##g" | cut -d '/' -f2 | xargs

| sort | tail -n+2 | cut -d '/' -f 4 | xargs

| sort | cut -d '/' -f4 | xargs

@site-a:
 url: http://domain.com/site-a/
 path: /www/wordpress/

@site-b:
 url: http://domain.com/site-b/
 path: /www/wordpress/

次のステップは、既存の別名に対して別名を検証することです。サイトパスによるソートも含む

並べ替え:sites=$(wp site list --field=url); readarray -t sorted < <(for a in "${sites[@]}"; do echo "$a"; done | sort); for a in "${sorted[@]}"; do echo "$a"; done

並べ替え:wp site list --field=url | sort

既存のエイリアス:wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3

リモートエイリアスジェネレータ(サーバー上で実行)

[email protected];cd /www/wordpress/;home=$(wp eval "echo get_home_path();"); url=$(wp eval "echo site_url();"); for site in $(wp site list --field=url); do alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")); if [ ! -z "$alias_name" ]; then echo -e "@prefix-$alias_name:\n url: $site\n ssh: $ssh$home\n"; fi; done;

3
jgraup

LOCAL


ローカルのエイリアスでは、config.ymlであなたのパスを事前に定義するのが最善です。それから、サイトをターゲットにするためにurlを指定するだけで、変数をきれいにしてください。デフォルトはブログID順になっているため(サイトでは使用していません)、長いリストのサイトがある場合は、出力をソートすると便利です。

wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@$ALIAS:\n url: SITE";fi'

結果

path: /www/wordpress/

@site-a:
  url: http://domain.com/site-a/
@site-b:
  url: http://domain.com/site-b/

REMOTE


リモートのエイリアスでは、config.ymlに相対して接頭辞を付ける方が良いでしょう。したがって、この場合はremote-です。また、WordPressのパスをsshプロパティに設定することもできます。

HOME=$(wp eval "echo get_home_path();");wp site list --field=url|sort|xargs -I 'SITE' sh -c 'ALIAS=$(cut -d'/' -f4 <<< SITE);if [ ! -z "$ALIAS" ];then echo -e "@remote-$ALIAS:\n url: SITE\n [email protected]$HOME";fi'

結果:

@remote-site-a:
  url: http://domain.com/site-a/
  ssh: [email protected]/www/wordpress/
@remote-site-b:
  url: http://domain.com/site-b/
  ssh: [email protected]/www/wordpress/

リストエイリアス


aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);

既存のエイリアス


aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);

search="@site-a"

if ! grep $search <<< "$aliases"; then echo "NOT FOUND"; fi

BASH REFERENCE


  • VAR=$(echo "stuff") - 出力をキャプチャする
  • HOME=$(wp eval "echo get_home_path();") - PHPを実行してvarに代入する
  • wp site list --field=url | sort - 結果のサイトリストをソートする
  • | xargs -I 'SITE' - パイプからのforループで、値変数としてSITEを使う
  • | xargs -I % - 意味のある記号を選ぶ
  • xargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";' - 複数のbashコマンドを実行する
  • cut -d'/' -f4 <<< SITE - 変数から分割
  • ALIAS=$(cut -d'/' -f4 <<< SITE) - '/'でURLを分割し、4番目のインデックスをvarに割り当てます
  • echo -e "\txyz\n\n" - エスケープ文字を許可する
  • if [ ! -z "$ALIAS" ];then echo -e "";fi - 空でない変数に対して実行
  • wp cli alias | grep '^@' | grep ':$' - 結果配列に対する複数のフィルタ
  • grep '^starts-with' - 行は値で始まります
  • grep 'ends-with$' - 行は値で終わります
  • sed "s,$url,,g" <<< "$site" - sed文字列を,セパレータに置き換えます
  • sed "s/find/replace/g" <<< "$value" - sedの文字列を/のセパレータに置き換えます(URLには不向きです)
  • wp site list --field=url | tail -n+2 - 最初の項目をスキップする
  • alias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site")) - 複数の文字列の置き換え
  • for i in $(wp site list --field=url); do echo $i; done; - リストをループスルーする
1
jgraup