J'ai quelques sites multisites, chacun comportant plusieurs sites, que je souhaite générer automatiquement @aliases for. Existe-t-il un moyen de synchroniser ces sites en tant qu’alias dans ma liste de sites ?
J'aimerais pouvoir cibler un seul site sans avoir à spécifier --url=http://domain.com/sub-site/
et utiliser la dernière partie de l'URL semble être un nom viable pour le alias .
$ 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
---
...
Je ne peux que trouver les commandes suivantes qui peuvent aider;
Affiche les alias actuels:
$ wp cli alias
Affiche tous les sites
$ wp liste de sites --field = url
(Idéal) Auto générer des alias:
$ wp alias de sites
$ wp cli alias --generate
Quelle que soit la solution, il convient d'inclure le path:
vers WordPress pour ce site et (facultatif) de produire des alias uniques qui n'ont pas déjà été ajoutés à ~/.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;
ou 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/
La prochaine étape serait de valider le pseudonyme par rapport aux pseudonymes existants. Et inclure le tri par chemin de site
Trier: 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
Trier: wp site list --field=url | sort
Alias existant: wp cli alias | grep '^@' | grep ':$' | cut -d':' -f3
Générateur d'alias distant (exécuté sur le serveur)
[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;
LOCAL
Pour les alias locaux, il est préférable de définir votre chemin à l’avance dans le fichier config.yml. Ensuite, gardez les variables propres en spécifiant uniquement la variable url
pour cibler le site. Le tri de la sortie est utile si vous avez une longue liste de sites, car la valeur par défaut est ID de blog (que nous n'utilisons pas).
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'
Résultat
path: /www/wordpress/
@site-a:
url: http://domain.com/site-a/
@site-b:
url: http://domain.com/site-b/
À DISTANCE
Pour les alias distants, il est préférable de les préfixer par rapport au fichier config.yml. Donc dans ce cas, remote-
. Vous pouvez également ajouter le chemin WordPress à la propriété 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'
Résultat:
@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/
LISTE ALIASES
aliases=$(wp cli alias | cut -d':' -f1 | grep -e "^@" | cut -d':' -f2 | sort);
ALIAS EXISTANT
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")
- Capturer la sortieHOME=$(wp eval "echo get_home_path();")
- Exécuter PHP et affecter à varwp site list --field=url | sort
- Trie la liste de sites résultante| xargs -I 'SITE'
- Pour la boucle à partir d'un tuyau et utiliser SITE comme variable de valeur| xargs -I %
- Choisissez un symbole qui a du sensxargs -I 'ITEM' sh -c 'echo ITEM; echo "2nd";'
- Exécuter plusieurs commandes bashcut -d'/' -f4 <<< SITE
- Séparer de la variableALIAS=$(cut -d'/' -f4 <<< SITE)
- Fractionner l'URL sur '/', attribuer le 4ème index à varecho -e "\txyz\n\n"
- Autoriser les caractères échappésif [ ! -z "$ALIAS" ];then echo -e "";fi
- Exécuter sur une variable non videwp cli alias | grep '^@' | grep ':$'
- Plusieurs filtres sur le tableau de résultatsgrep '^starts-with'
- La ligne commence par la valeurgrep 'ends-with$'
- La ligne se termine par la valeursed "s,$url,,g" <<< "$site"
- la chaîne sed est remplacée par le séparateur ,
sed "s/find/replace/g" <<< "$value"
- la chaîne sed est remplacée par le séparateur /
(non compatible avec les URL)wp site list --field=url | tail -n+2
- Ignorer le premier élémentalias_name=$(sed "s,/,,g" <<< $(sed "s,$url,,g" <<< "$site"))
- Remplacement de plusieurs chaînesfor i in $(wp site list --field=url); do echo $i; done;
- Liste en boucle