为多站点上的每个站点生成WP-CLI@别名

时间:2016-08-15 作者:jgraup

我有几个多站点,每个都有几个站点,我想自动生成@aliases 对于有没有办法在我的site list?

我希望能够以单个站点为目标,而无需指定--url=http://domain.com/sub-site/ 使用url的最后一部分似乎是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
---
...
我只能找到以下可能有用的命令:;

显示当前别名:

$wp cli别名

显示所有站点

$wp站点列表--字段=url

自动生成别名(理想):

$wp站点别名

$wp cli别名--生成

无论解决方案是什么,都应该包括path: 到该站点的WordPress,并且(可选)能够生成尚未添加到的唯一别名~/.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

Remote Alias Generator (run on 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;

1 个回复
SO网友:jgraup

<小时>

LOCAL


对于本地别名,最好在配置中提前定义路径。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\'

Result

path: /www/wordpress/

@site-a:
  url: http://domain.com/site-a/
@site-b:
  url: http://domain.com/site-b/
<小时>

REMOTE


对于远程别名,最好是相对于配置给它们加前缀。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 ssh=user@127.0.0.1$HOME";fi\'

Result:

@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/
<小时>

LIST ALIASES

<人力资源>
aliases=$(wp cli alias | cut -d\':\' -f1 | grep -e "^@" | cut -d\':\' -f2 | sort);
<小时>

EXISTING ALIASES

<人力资源>
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并分配给varwp site list --field=url | sort - 对生成的网站列表排序| xargs -I \'SITE\' - 对于来自管道的循环,使用SITE作为值变量| xargs -I % - 选择有意义的符号xargs -I \'ITEM\' sh -c \'echo ITEM; echo "2nd";\' - 运行多个bash命令cut -d\'/\' -f4 <<< SITE - 从变量拆分ALIAS=$(cut -d\'/\' -f4 <<< SITE) - 拆分“/”上的URL,将第四个索引分配给varecho -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; - 循环列表

  • 相关推荐

    将wp-cli命令添加到插件:如何向用户提供文档?

    我正在为我的一个插件添加wp cli支持。是否有一种公认的方式让我的用户知道他们可以将wp cli与我的插件一起使用?我可以把东西放进自述中。当然,我可以在我的管理页面上做出解释,我会做这些事情。但是,插件注册表中是否有特定的标记?自述文件的常规格式。txt和/或管理页面说明?(我知道wp mycommand help : 用户找到访问cli的方法后的内置帮助。)