Generieren Sie WP-CLI @ alias für jede Site auf Multisite

Ich habe einige Multisites mit jeweils mehreren Sites, für die ich @aliases automatisch generieren möchte . Gibt es eine Möglichkeit, diese Websites als Aliase in meiner Website-Liste zu synchronisieren?

Ich möchte in der Lage sein, auf eine einzelne Site zu zielen, ohne --url=http://domain.com/sub-site/ angeben zu --url=http://domain.com/sub-site/ und die Verwendung des letzten Teils der URL scheint ein praktikabler Name für den Alias ​​zu sein .

 $ 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 --- ... 

Ich kann nur die folgenden Befehle finden, die helfen können;

Zeigt aktuelle Aliase an:

$ wp cli-Alias

Zeigt alle Websites an

$ wp Site Liste –field = URL


(Ideal) Automatisch Aliase erzeugen:

$ wp Site-Aliase

$ wp cli alias –generate


Was auch immer die Lösung ist, sollte den path: zu WordPress für diese Site enthalten und (optional) in der Lage sein, eindeutige Aliase zu erzeugen, die noch nicht zu ~/.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;

oder 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" 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/ 

Der nächste Schritt wäre, den Alias ​​gegen vorhandene Aliase zu validieren. Und Sortierung nach Site-Pfad einschließen

Sort: 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 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

Sortierung: wp site list --field=url | sort wp site list --field=url | sort

Vorhandener Alias: wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3 wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3

Remote Alias ​​Generator (läuft auf dem Server)

ssh=user@127.0.0.1;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;

Solutions Collecting From Web of "Generieren Sie WP-CLI @ alias für jede Site auf Multisite"


LOKAL


Für lokale Aliase ist es am besten, wenn Sie Ihren Pfad im Vorfeld in der Datei config.yml definieren. Halten Sie die Variablen dann sauber, indem Sie nur die url , die auf die Site ausgerichtet ist. Das Sortieren der Ausgabe hilft, wenn Sie eine lange Liste von Websites haben, da der Standard durch die Blog-ID ist (die wir nicht verwenden).

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'

Ergebnis

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

REMOTE


Bei Remote-Aliasnamen ist es besser, sie relativ zur Datei config.yml zu setzen. Also in diesem Fall, remote- . Sie können den WordPress-Pfad auch auf die ssh Eigenschaft 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 ssh=user@127.0.0.1$HOME";fi'

Ergebnis:

 @remote-site-a: url: http://domain.com/site-a/ ssh: user@127.0.0.1/www/wordpress/ @remote-site-b: url: http://domain.com/site-b/ ssh: user@127.0.0.1/www/wordpress/ 

Liste Aliase


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

VORHANDENE ALIASEN


 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 REFERENZ


  • VAR=$(echo "stuff") - Ausgabe erfassen
  • HOME=$(wp eval "echo get_home_path();") - PHP HOME=$(wp eval "echo get_home_path();") und var zuweisen
  • wp site list --field=url | sort wp site list --field=url | sort - Sortiert die resultierende Site-Liste
  • | xargs -I 'SITE' | xargs -I 'SITE' - For-Schleife aus der Pipe und verwenden Sie SITE als Wertvariable
  • | xargs -I % | xargs -I % - Wählen Sie ein Symbol, das Sinn macht
  • xargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";' - Führen Sie mehrere Bash-Befehle aus
  • cut -d'/' -f4 < << SITE - Von Variable cut -d'/' -f4 < << SITE
  • ALIAS=$(cut -d'/' -f4 < << SITE) - URL auf ALIAS=$(cut -d'/' -f4 < << SITE) , den vierten Index var zuweisen
  • echo -e "\txyz\n\n" - echo -e "\txyz\n\n" Zeichen
  • if [ ! -z "$ALIAS" ];then echo -e "";fi if [ ! -z "$ALIAS" ];then echo -e "";fi - if [ ! -z "$ALIAS" ];then echo -e "";fi auf nicht-leere Variable
  • wp cli alias | grep '^@' | grep ':$' wp cli alias | grep '^@' | grep ':$' - Mehrere Filter im Ergebnis-Array
  • grep '^starts-with' - Die Zeile beginnt mit dem Wert
  • grep 'ends-with$' - Zeile endet mit Wert
  • sed "s,$url,,g" < << "$site" - sed string ersetzen durch , separator
  • sed "s/find/replace/g" < << "$value" - sed string ersetzen durch / separator (nicht gut mit urls)
  • wp site list --field=url | tail -n+2 wp site list --field=url | tail -n+2 - Überspringe den ersten Gegenstand
  • alias_name=$(sed "s,/,,g" < << $(sed "s,$url,,g" <<< "$site")) - Mehrere Zeichenketten ersetzen
  • for i in $(wp site list --field=url); do echo $i; done; - Schleife durch die Liste