WP-CLI beats SQL
Useful tricks to make the most of WordPress tools and save time.
WP CLI?
WP CLI is handy when it comes to request database.
Deactivate all plugins
The following SQL statement is often used to debug :
UPDATE wp_options SET option_value = 'a:0:{}'WHERE option_name = 'active_plugins';
But WP CLI allows you to run the same statement :
wp db cli
UPDATE wp_options SET option_value = 'a:0:{}'WHERE option_name = 'active_plugins';
wp db cli allows for making all kinds of SQL requests, besides, credentials are already loaded from the wp-config file so it’s super fast :
wp option update active_plugins "a:0:{}"
But it gets better! You can use a specific command to deactivate all plugins :
wp plugin deactivate --all
Read options
We already saw the UPDATE part, here is the GET part :
wp option get active_plugins --format=json
which displays something like :
["gutenberg/gutenberg.php"]
So much faster but it gets better! You can use a specific command to get plugin list here :
wp plugin list --status=active --format=json
which displays something like that :
[
{
"name": "gutenberg",
"status": "active",
"update": "available",
"version": "2.1.0"
}
]
Getting useful information
You can google « how to get db size » or you can simply run :
wp db size
You can even use the –tables option to get each table size. Nice!
wp db size --tables
Please read the official documentation : wp db size
Tabula rasa
A nice command is the reset command :
wp db reset
This erase database but it keeps the miminum keys such as admin user account. Pretty useful when developing plugins, it allows for testsing all kind of situations, especially when your option page is not set which prevents bad warnings and notices.
This will prompt a message because this operation is kinda dangerous, for example on a production server, but you can use the global WP CLI option –yes to skip that :
wp db reset --yes
Search and replace
Search and replace in posts
Before WP CLI, I used to do that :
UPDATE wp_posts SET POST_CONTENT = replace(POST_CONTENT, 'trucmuche', 'bidule');
but now I prefer the following :
wp search-replace 'trucmuche' 'bidule' table=wp_posts --dry-run
I always add a « –dry-run » to make sure my request has good results and when I’m sure I remove the –dry-run :
wp search-replace 'trucmuche' 'bidule' table=wp_posts
the table option is pretty cool, I don’t have to run the entire database.
Search and replace and export
The following WP CLI command is gold :
wp search-replace 'local.wordpress.test' 'mon-site.com' --export=dump.sql
Everything is done in 1 command. I get a nice and clean SQL export.
See wp search-replace for all options.
Export/import
Export
The wp db export works like that :
wp db export dump.sql
but you can be more specific and select only the tables you need :
wp db export dump.sql --tables=wp_users,wp_usermeta
Awesome !
Import
To import a dump into your database just run :
wp db import dump.sql
import use the credentials set in wp-config.php so it’s smooth. I hate typing credentials in my terminal.
It does not work for me!
Sometimes, there are incompatible plugins that mess all the fun but you can skip them! See skip plugins.
See also blog post K.Lampert for more details.
Wrap up
WP-CLI is awesome. It can even generate (scaffold) Gutenberg blocks, themes, and plugins with extra features (tests, config files).
WP-CLI works pretty much like plugins you can extend it with useful packages.