Improving WordPress Local Development Startup Time
NOTE: This Pro-Tip is specific to OSX, but you could probably adapt most of it to a Windows workflow, minus the AppleScript for xip.io URLs. Also, I'm not exactly great with shell, so if you have improvements to these simple aliases please share them, I'm hoping this will spark someone much smarter than me to create a better tool for packaging this functionality into a more robust command.
I've been using some bash aliases to automate the setup of local WordPress sites and wanted to share my setup and process.
This sets you up with a workflow that basically goes like this:
- Create database for local WordPress site
- Create directory for local WordPress site
- Type command in Terminal
- Answer questions about how you want WordPress set up
- WordPress is downloaded, wp-config.php is set up, and custom theme is installed
- Browser window opens to WordPress install page
- ...
- Profit
When you tell YeoPress what domain your site will be available at, use the .dev
domain that pow will generate. It will be [your directory name].dev
.
Then I usually just drag the directory to CodeKit and start developing on my local WordPress site and watch the changes happen live.
It takes about 1 minute to go from creating the directory to being able to start editing my theme and watch the layout changes occur in real time.
Before we begin
First, you will need to have some things configured in order for this to work, it is a bit of set up time, but once it's all configured the gains are totally worth it.
- Install Yeoman
npm install -g yo
- Install YeoPress
npm install -g generator-wordpress
- Install pow
curl get.pow.cx | sh
or Anvil - Set up pow and apache to play nice
- Set up pow to be capable of hosting PHP files
- Save pertinent config files (more information on these below)
- Install powder
gem install powder
(you can skip this if you don't want to automatically generate your.dev
links and open the/wp-admin/install.php
after generating your site. - Optional: Set up PHPMyAdmin if you prefer to have a GUI for creating your databases. As long as you followed the apache and pow playing nice instructions above you won't have to worry about stopping pow every time you want to use PHPMyAdmin.
The config files
We'll be symlinking a config.ru
file that tells rack how to deal with our PHP sites; a config.rb
file that sets up our site for Compass so you can just add the site's directory to CodeKit, Scout, Mixture, or just set up watching via the command line; and I also symlink a xip.io.scpt
file that makes it easier for me generate xip.io URLs to my local sites so I can share a link with my coworkers and they can see the current progress and I can easily test the site on mobile devices with these links, too.
config.ru
You can get the original config.ru
file we'll be using from this gist, and I created an alternate gist of the config.ru
that has one line that was preventing my CSS and JS files from loading commented out. If the original is giving you issues, try it with mine.
config.rb
You can use any config.rb
file that has the settings you want, I have one tailored to the base theme that we install on all of our sites, which I also tell the yeoman wordpress generator to download from GitHub and install into the correct theme directory for me.
I guess if you're a command-line SASSer you could tell SASS to watch the directory in the alias, too.
You can totally skip this file if Compass and SASS aren't your thing.
xip.io.scpt
You can also skip this if you don't care about being able to send links across your network and pull up the .dev
domains that pow generates on mobile devices.
If that does interest you, here's the AppleScript file for you.
Storing these files
I prefer to keep them in ~/Sites/config/
but you can adapt the aliases below to point to wherever you'd like.
The bash aliases
Because I'm not always dealing with WordPress, I set up two aliases.
One starts with the WordPress generator, initializes git flow, then performs my symlinking, and opens up the .dev
domain in my browser via powder.
The other excludes the WordPress generator and the git flow initialization.
NOTE: YeoPress can initialize a git repo for you, but I had issues with the generator hanging every time I tried to initialize git through it. If you don't have this problem, I'd just let YeoPress do it for you since you'll be answering it's set up questions anyway.
fireitup
alias fireitup='ln -s ~/Sites/config/config.ru; ln -s ~/Sites/config/config.rb; ln -s ~/Sites/config/xip.io.scpt; powder link; powder open'
wpfireitup
alias wpfireitup='yo wordpress; git flow init; fireitup'
I'm not shell expert, so I'm sure you have ways of improving these aliases, and maybe even combining them into one command with parameters, so please share them in the comments.
I would really like to improve upon them.
xip.io
There's a post detailing my xip.io.scpt AppleScript and the xipit
alias that I use to run it if that interests you. If you don't care about that functionality you should remove the ln -s ~/Sites/config/xip.io.scpt;
from the fireitup
alias.