Sync your WordPress content (database and uploads) between stages using the power of WP-CLI aliases.
Using composer:
composer require n5s/wp-cli-move --devUsing wp package install:
wp package install nlemoine/wp-cli-move:^0.1.0The requirements must be met on both stages.
- SSH access
- WP-CLI
- mysql/mysqldump
- rsync
- gzip (optional, can be disabled with the
--disable-compressflag)
Before running commands, make sure you have WP-CLI aliases set up. This can be done either with the wp cli alias command or by editing your wp-cli.yml file.
Once you're done, quickly check that remote WP-CLI commands work as expected:
wp @your-alias option get home
# It should print your alias home URL
https://example.orgFor more information about alias configuration, refer to the following WP-CLI documentation:
- https://make.wordpress.org/cli/handbook/guides/running-commands-remotely/#aliases
- https://make.wordpress.org/cli/handbook/references/config/
Depending on the sync direction, use either the pull or push commands.
wp move pull/push [<alias>] [--db] [--uploads] [--disable-compress] [--dry-run]If you omit the --db or --uploads flags, both data types will be synced by default.
Note that the <alias> argument is optional. Configured aliases will be shown in a menu to choose from if left empty.
Caution
Just like any tool that manipulates your data, it's always a good idea to make a backup before running commands.
Especially when syncing uploads, which uses the rsync command with the --delete flag under the hood and can wipe all your media files if used incorrectly.
Be sure to know what you're doing.
Both pull and push commands use the same options.
[<alias>]: The alias you want to sync with.--db: Sync only the database.--uploads: Sync only the uploads.--disable-compress: Disable database dump compression.--dry-run: Print the command sequence without making any changes.
Note
Each time you sync your database from one stage to another, wp-cli-move will locally backup the database of the synced stage (a local database dump when pulling, a remote database dump when pushing).
Pull your production content to your local environment:
wp move pull @productionTip
Using @ as declared in wp-cli.yml is optional. For example, production and @production will resolve the same alias.
Push your local content to your staging environment:
wp move push stagingThis WP-CLI package aims to replace the (still working but unmaintained) awesome Wordmove Ruby gem 💎. It has been a time and life saver for many years. I'll be forever grateful to @alessandro-fazzi for creating it! 🙌
Although Wordmove is a great and handy tool for your daily WordPress work, some reasons led me to come with a simpler, more WordPress flavoured alternative:
- It has become harder to easily install the gem over the years as the required Ruby version has been deprecated, especially for non-Ruby developers (at least for me).
- Most importantly, an idea I submitted years ago has never been implemented. This feature would remove a lot of tedious configuration setup (database credentials, etc.).
- It's written in Ruby 😄