| .github/workflows | ||
| src | ||
| .distignore | ||
| .editorconfig | ||
| .gitignore | ||
| .release-please-manifest.json | ||
| CHANGELOG.md | ||
| command.php | ||
| composer.json | ||
| LICENSE | ||
| phpcs.xml.dist | ||
| phpstan.neon.dist | ||
| README.md | ||
| rector.php | ||
| release-please-config.json | ||
| wp-cli.yml | ||
wp-cli-move
Sync your WordPress content (database and uploads) between stages using the power of WP-CLI aliases.
Install
Using composer:
composer require n5s/wp-cli-move --dev
Using wp package install:
wp package install nlemoine/wp-cli-move:^0.1.0
Requirements
The 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.org
For 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/
Usage
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
rsynccommand with the--deleteflag under the hood and can wipe all your media files if used incorrectly.Be sure to know what you're doing.
Options
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-movewill locally backup the database of the synced stage (a local database dump when pulling, a remote database dump when pushing).
Examples
Pulling content
Pull your production content to your local environment:
wp move pull @production
Tip
Using
@as declared inwp-cli.ymlis optional. For example,productionand@productionwill resolve the same alias.
Pushing content
Push your local content to your staging environment:
wp move push staging
Credits
This 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 😄