I’ve become a big fan of Local by Flywheel for local WordPress development (i.e. running websites on my Mac). One thing I do find frustrating is the need to SSH into my Local by Flywheel website when I want to run a WP CLI command.
Thanks to some great work by Morgan Estes with his project BigWing/Local-WP-CLI, I learned I can run WP CLI commands from my Mac without SSHing into Local by Flywheel (I’ve not tried this on a Windows machine).
If you’re in a hurry to set this up, you can jump to the Quick Setup below.
Configure WP CLI to work without SSH
The key to making this work is adding two files
Where to Add These Files
Both of these files go in the project root directory. By default the project root directory for a website called mywebsite, would be
~/Local Sites/mywebsite. Before adding any files, the contents of the project root directory should be three folders
/logs. You two new files with be alongside these directories.
What Goes In These Files
path: app/public require: - wp-cli.local.php
The contents of
wp-cli.local.php will vary for each Local by Flywheel website. The information you will need can be found in the Local by Flywheel dashboard for your site under the heading DATABASE.
In my screenshot the relevant values are:
- Remote Host:
- Remote Port:
Based on these values, we create the file
wp-cli.local.php with the contents
<?php define('DB_HOST', '192.168.94.100:4042'); define('DB_USER', 'root'); define('DB_PASSWORD', 'root'); // Only display fatal run-time errors. // See http://php.net/manual/en/errorfunc.constants.php. error_reporting(E_ERROR); // Disable WordPress debug mode. // See https://codex.wordpress.org/WP_DEBUG. define('WP_DEBUG', false);
Confirm WP CLI Works without SSH
To confirm everything is setup correctly from the command line (on your Mac, without SSHing into Local by Flywheel) run:
$ wp option get siteurl
and if everything is working properly, you’ll get back the URL for your website.
My most common error at this point is forgetting to have the website running in the Local by Flywheel Dashboard. We can’t use WP CLI with the site, if the site is not running.
How Does this Work?
WP CLI checks for config files named
wp-cli.yml inside the current working directory (or upwards).
By adding our
wp-cli.local.yml to the project root, any command run anywhere inside the project will use our
wp-cli.local.yml configuration (WP CLI config documentation).
We define the
path to the WordPress install in relation to
wp-cli.local.yml and we require the file
wp-cli.local.php be run before any of the WordPress files.
We define the database connection information for connecting to the database from outside Local by Flywheel (this is different than the database credentials found in
wp-config.php connects to the database from inside Local by Flywheel). Since our database connection information is set before
wp-config.php, our information is used. Since WordPress tries to set these constants after they are already set, PHP throws notices. To suppress these notices we set PHP to only display fatal run-time errors.
Other Methods to Setup
Run this command from the the project root directory of the site.
$ curl -O https://raw.githubusercontent.com/salcode/ssh-into-local-by-flywheel/master/wpcli-lbf-setup && bash wpcli-lbf-setup && rm -rf ./wpcli-lbf-setup
Running the following at the command line will:
- download a bash script to create these two files
- run the bash script (you’ll be prompted for the Database host and Database port)
- delete the bash script, leaving the two new files behind
Thanks to Justin Sternberg for sharing his similar quick setup in his Dot-Files.
SSH Into Local by Flywheel
While this article is about using WP CLI without SSHing into Local by Flywheel, sometimes you find yourself needing to SSH in for other reasons. I found being unable to directly SSH into a site from the command line frustrating (I wanted to avoid using the Local by Flywheel Dashboard every time I wanted to SSH in). To this end, I created a project on GitHub called SSH into Local By Flywheel. It describes how to create a
.dockerid file in your project root directory with the Docker container name for that site. Once that file is in place you can use
sshlbf to quickly SSH into Local by Flywheel.
As part of this project I’ve also added the command
wpcli-lbf-setup, which is the installation script used in the Quick Setup. If you have this project installed you can use
wpcli-lbf-setup even if you’re not connected to the Internet.