Last updated:
In the last two articles we looked at installing and configuring WP-CLI and using WP-CLI to install WordPress. This article looks at managing WordPress settings.
The option subcommand lets you view and change WordPress options. Any option defined in the database’s options table can be retrieved and altered.
You can list all options with wp option list
. The list will be rather long, so you probably want to check specific options instead. For that, wp option get
is your friend. For instance, you can use the command to check the admin email address:
$ wp option get admin_email support@catalyst2.com
And you can change values via the wp option update
command:
$ wp option update admin_email premium@support.catalyst2.com Success: Updated 'admin_email' option. $ wp option get admin_email premium@support.catalyst2.com
If you regularly install WordPress you probably make the same configuration changes time and again. With WP-CLI, you can quickly make the changes you want.
A good example are the default comment setting in WordPress. By default, non-registered users can leave comments. To some people that is a feature, while others see it as a bug. If you are in the latter camp then you need to do quite a bit of clicking around to tweak the setting: you need to navigate to Settings » Discussion; tick Users must be registered and logged in to comment and save the setting. With WP-CLI you can instead run a single command. You can even add the command to a script. Before we get to that, let’s first look at some more examples.
Image: the default comment settings in WordPress.
Changing settings is easy enough. However, it can be tricky to find the name of a setting. Luckily, the Option reference page in the WordPress Codex lists quite a few options. For instance, the page shows that the name of the option “Users must be registered and logged in to comment” is comment_registration. It also shows that possible values are 0
(false) and 1
(true).
Once you know the name of an option you can easily change its value:
$ wp option get comment_registration 0 $ wp option update comment_registration 1 Success: Updated 'comment_registration' option.
Similarly, you can disable comments on all new posts by setting default_comment_status to “closed”:
$ wp option get default_comment_status open $ wp option update default_comment_status closed Success: Updated 'default_comment_status' option.
And while we’re at it, let’s disable pingbacks as well:
$ wp option get default_pingback_flag 1 $ wp option update default_pingback_flag 0 Success: Updated 'default_pingback_flag' option. $ wp option get default_ping_status open $ wp option update default_ping_status closed Success: Updated 'default_ping_status' option.
As said, just about any setting can be tweaked. It is just a matter of find the option name.
Image: the changed settings.
If you regularly make certain changes you can use a script to automate the job. For instance, this Bash script makes the above tweaks:
$ cat wp-cli-customisations #! /usr/bin/env bash # This script demonstrates how to automate WP-CLI customisations. # There are better ways to do this - for instance, the option # names and values can be listed in a separate file, and the # script could then simply loop through the lines in that file. # First, let's check if wp lives: if ! command -v wp &> /dev/null; then printf '%s\n' "Failed to execute 'wp' - aborting" exit 1 fi # Here come our customisations: if ! wp option update comment_registration 1 --quiet; then printf '%s\n' "Failed to update comment_registration value" fi if ! wp option update default_pingback_flag 0 --quiet; then printf '%s\n' "Failed to update default_pingback_flag value" fi if ! wp option update default_ping_status closed --quiet; then printf '%s\n' "Failed to update default_ping_status value" fi
The --quiet
option in the wp option update
commands suppress the output (i.e. you don’t get the “Success” messages). If you run the script interactively then you may actually prefer to see the confirmation messages. In that case you can simply leave out the --quiet
options.
Now that we have touched on automating tasks we should also mention that the wp option list
command can format the output in a large number of formats, including JSON, YAML and CSV. This gives you a lot flexibility. For instance, you can use the comma-separated format and then pipe the output to grep
and awk
:
$ wp option list --format=csv | grep -E "^(siteurl|home)" | awk -F',' '{print $2}' http://example.com http://example.com