If you use WP-cli command on a multisite it be default will only run on the mainsite.
But often you want to change a setting for all the sites.
In my case I wanted to set the timezone to Amsterdam for the whole network. That’s not hard:
wp option set timezone_string 'Europe/Amsterdam'
On a multisite this is a bit more difficult. But the script below will do the same for each site in a multisite.
wp site list --field=url | xargs -I % sh -c 'printf "SITE: %\n"; wp option set timezone_string 'Europe/Amsterdam' --url=%'
It consists of 3 parts.
First create a list of all site url’s
wp site list --field=url
Secondly we pass that on to xargs.
xargs is a very powerfull tool. One that I hardly understand and should go into deeper one day.
This is the best tutorial I found if you want to start with xargs.
The only thing important now is the -I %
. This sets the variable to %
.
But the most important thing here is that inside the '***'
You can run any command. like normal.
xargs -I % sh -c '***'
Which brings us to the final part.
First print the site url on a line, then do the actual command we want to do on each sub site. As you can see we pass on the --url=%
where we set the variable given in xargs.
printf "SITE: %\n"; wp option set timezone_string 'Europe/Amsterdam' --url=%