Essential WP-CLI commands every WordPress developer should know

WP-CLI is the official command-line interface for WordPress, and once you start using it you will wonder how you ever managed without it. Tasks that take ten clicks in the admin panel — updating all plugins, regenerating thumbnails, importing a database dump, searching and replacing URLs after a domain change — are reduced to a single command you can run over SSH in seconds. WP-CLI is pre-installed on most managed WordPress hosts and can be installed on any Linux or macOS server in under a minute. The most transformative command is wp search-replace, which handles serialised PHP data correctly (unlike a raw MySQL search-replace that breaks serialised arrays). wp media regenerate rebuilds all image sizes after you change the registered sizes in your theme — a process that would otherwise require a plugin. wp plugin update --all and wp core update let you manage updates in bulk from a deployment script. Combining WP-CLI with the bash backup script and core Linux commands gives you a complete server-side toolkit. You can also write custom WP-CLI commands as classes registered with WP_CLI::add_command(), which is ideal for custom data migrations or site-health checks that you run regularly. The reference below covers the twenty commands I reach for most often.

Problem: You need to perform bulk WordPress operations (search-replace after migration, mass plugin update, thumbnail regeneration) efficiently from the command line.

Solution: Use the following WP-CLI commands via SSH:

# ── Install WP-CLI ────────────────────────────────────────────────────────────
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
wp --info  # verify installation

# ── Core & updates ────────────────────────────────────────────────────────────
wp core update                    # update WordPress core
wp plugin update --all            # update all plugins
wp theme update --all             # update all themes
wp core verify-checksums          # detect tampered core files

# ── Search & replace (handles serialised data correctly) ─────────────────────
wp search-replace 'http://old-domain.com' 'https://new-domain.com' --dry-run
wp search-replace 'http://old-domain.com' 'https://new-domain.com'

# ── Database ──────────────────────────────────────────────────────────────────
wp db export backup-$(date +%Y%m%d).sql   # export DB
wp db import backup.sql                    # import DB
wp db optimize                             # optimise all tables
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_status='publish';"

# ── Media ─────────────────────────────────────────────────────────────────────
wp media regenerate --yes          # regenerate all thumbnails
wp media import /path/to/image.jpg --title="My Image"

# ── Users ─────────────────────────────────────────────────────────────────────
wp user create editor editor@example.com --role=editor --send-email
wp user update 1 --user_pass='NewSecurePass!2021'
wp user list --role=administrator

# ── Cache ─────────────────────────────────────────────────────────────────────
wp cache flush                     # clear object cache
wp transient delete --all          # delete all transients

# ── Cron ──────────────────────────────────────────────────────────────────────
wp cron event list                 # show scheduled cron events
wp cron event run helloadmin_send_followup  # manually trigger an event

NOTE: Always run wp search-replace --dry-run first to preview the changes before committing. The --dry-run flag outputs how many rows would be changed without modifying the database. On multisite installations, add the --network flag to run the command across all sites. When running WP-CLI as root, add the --allow-root flag; however, it is safer to run it as the web server user (sudo -u www-data wp ...) to avoid file ownership issues.