WordPress Theme: Just Write

Just Write - Free WordPress Theme

Just Write - Free WordPress Theme Just Write is a WordPress theme that I released back in March. This simple theme is geared towards writers and bloggers who want the focus of their site to be on their written content. It includes a primary menu, a custom site logo, and a sidebar that can be toggled.

I just released an update that introduces custom color options and minor bug fixes. The update still needs to be approved before it appears in the directory. But in the meantime, the latest version can be found on GitHub:

A demo can be found here. And the previous version can be found in the official directory here:

Just Write
by ryancowles

Just Write is a simple theme, geared towards writers and bloggers who want the focus of their site to be on their written content. It includes a primary menu, and a sidebar that can be toggled.


  • Current version: 1.1
  • Rating: 90(2 ratings)
  • Downloaded 0 times

My Workflow Tips and Tricks

Alfred Workflow: Boot up

Alfred Workflow: Boot up

I recently returned from a team meetup in Hawaii (you can read about the fun stuff here). The meetup had a strong focus on discussing and improving our efficiency as a team. Part of that involved sharing our individual workflows so we could learn from each other. While some of the tips that I shared are specific to the work that we do as a team, other parts might be helpful in general.


I rely heavily on an app called Alfred. If you haven’t used it before, I recommend giving it a look. On the surface, it looks like a simple Spotlight replacement. But when you get under the hood and start using Alfred’s features you’ll see that it blows Spotlight out of the water.

Shameless self promotion: I was recently interviewed on the Alfred Blog, which you can check out here.

Starting my day

I have a custom Alfred Workflow that I use to get my day started. I hit Opt + Space, and enter the work keyword into the prompt. This opens up all of the apps that I use for work, as well as the tabs that I use in Chrome to start my day.

For reference, the apps and sites that I open are:

I have a few variations for this one. For example, if I’m doing a theme review, I have an Alfred workflow for that. It will fire up my theme review Vagrant, open Sublime Text, and open up the front-end and back-end of the site in Chrome.


Color coded Gmail Labels

Once I’m booted up, I head over to the Gmail tab. At Automattic, we use P2s extensively for internal communication (well, actually, o2). I subscribe to the most important of these by email. I use Gmail filters and labels to keep my inbox organized. The filters break things down by category (i.e., Jetpack, Support Forums, GitHub) and then I use labels to color code them. That way I can get a good sense of what requires my attention with just a quick glance at my inbox.

I also have my inbox set to show unread messages at the top. This allows me to mark the non-important messages as read, and they will disappear from the top. If one of the emails requires a quick action, I try to do it right away. If I don’t need to complete the action right away, I use a hotkey to quickly enter it into Todoist.


Todoist Workflow

When I enter a task into Todoist using the quick add, I just send it to my inbox. Then, after getting caught up on my emails, I open up the Todoist app itself and organize my tasks using Projects and Labels. I keep projects top level (Personal, Work, Read, Write, etc.). I then use labels to break things down into specifics (Forums, P2, GitHub, etc).


After email, I head over to Slack, which we use for synchronous communication. I do not read scroll back in Slack when I logon for the day. I also mute most of the channels that I am in. The exceptions are my team channels, and other important company-wide channels. This allows me to avoid unnecessary distractions, but still receive notifications when someone mentions a keyword in a muted channel.

Alfred Workflows

Now that I’m all caught up on communication, I’m ready to start my day. Depending upon what I’m working on this work can vary quite a bit. But there are a few Alfred workflows that I use on a regular basis:

  • Alfred Gist: Easily create a Gist from the contents of your clipboard. This is handy when I’m writing a quick code snippet in Sublime Text for a user, and want to share it with them.
  • Caffeinate Control: This allows you to enable/disable your Mac’s sleep function. This comes in handy when I am regen’ing thumbs, or doing something that requires my monitor to remain awake.
  • WordPress developer reference: Search the .org documentation for functions, hooks, classes, etc. It also autocompletes, which is nice for when I can’t remember the exact name of a hook or function.

There are a handful of commands that I run on a regular basis to troubleshoot Jetpack connection issues. Instead of manually typing these commands in each time, I have workflows that allow me to automate the process.

For example, I often try to cURL a site’s xmlrpc.php file to see if it is accessible. Instead of typing the command each time, I just copy the URL to my clipboard, hit Opt + Space to bring up Alfred, and enter the curl keyword and Ctrl + V to paste the URL. Doing so will run the following command in Terminal (where {query} is the URL):

curl -A "Jetpack by" -is -H 'Content-Type: text/xml' --data 'demo.sayHello' '{query}' && echo

Command Line

iTerm2 and Oh my ZSH

Speaking of the command line, I use iTerm2 as a replacement for the native Terminal. And I use zsh instead of bash, with oh my zsh to manage my zsh config. (h/t @jeherve). Both are customizable and provide many helpful shortcuts right out of the box.


When I complete a task, I try to make a note of it into iDoneThis. I have an Alfred workflow that allows me to type idid followed by a description. I don’t use this as much as I should, but it is helpful to reflect upon what I’ve accomplished in a day/week.


Hemingway Editor App

When I am writing a post or replying to a non-native English speaking user I often run it through Hemingway. The editor looks for wordy sentences, adverbs, passive voice, and complicated words. It isn’t bullet proof, but it does catch quite a few common errors.

Screenshots / Sharing

I use Cloudup to share files. It lives in my menubar, and I can easily share files by dragging them onto the icon. When the upload completes, Cloudup copies the URL to my clipboard and it is ready to send. If I need to annotate screenshots before sending, I use Glui. Using Glui I can quickly mark up diagrams, add arrows, text, and more before sharing the image on Cloudup.


I’m constantly iterating on my workflow, so none of these techniques are written in stone. Do you have any workflow tips or tricks? If so, I’d love to hear!

2013 in Review

2013 in Blogging by

2013 in Blogging by

The stats helper monkeys have been busy putting together a personalized report detailing how everyone’s blog did in 2013. Here is an excerpt from my report:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 59,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 22 sold-out performances for that many people to see it.

Check out my full year in review! And if you have a or Jetpack enabled blog, keep your eyes peeled for your own report!

WordPress Functionality Plugins

WordPress Functionality Plugin Presentation

WordPress Functionality Plugin Presentation

I recently gave a talk at the Pasadena WordPress Meet Up on Functionality Plugins. The presentation was short – more of an intro than anything else – but I hope someone found it helpful. For more information, you can check out the resources slide at the end of the presentation.

If you have any questions, or want to share some of your thoughts, leave a comment below. Now, enough rambling, here are the slides:


Web Developers and the Impostor Syndrome

Last September, I had lunch with another WordPress Developer while at WCLA. During our discussion, we touched on an interesting subject. The Impostor Syndrome. I wasn’t aware of the actual term at the time, but the definition seems to fit our discussion.

The impostor syndrome, sometimes called impostor phenomenon or fraud syndrome, is a psychological phenomenon in which people are unable to internalize their accomplishments. Despite external evidence of their competence, those with the syndrome remain convinced that they are frauds and do not deserve the success they have achieved. Proof of success is dismissed as luck, timing, or as a result of deceiving others into thinking they are more intelligent and competent than they believe themselves to be.

How does this apply to web developers? What the hell am I talking about?

Let me explain…

During our talk we both acknowledged that when we first started working with other developers, we were apprehensive about it. Not because we were against collaboration. Not because we were against working with other people. But simply because it was very intimidating.

I know for myself, it wasn’t necessarily a lack of confidence. I have always taken pride in my work, and I am confident in my craft. I know that I know my stuff! Yet, at the same time, there is a feeling of vulnerability when you expose the code behind your work to other people.

The “I Can Do It Myself” Stage

Prior to working with other developers, I tried to do everything myself. I worked at small agencies and was usually the only full-time developer on staff. This forced me to learn a lot, and to learn it quickly. But the projects continued to get more and more complex. And the workload kept increasing. I had to work with other people. I was terrified. What if they find errors in my code? What if I’ve been doing something incorrectly? What if I’m a fraud?!

At this point in time, I had plenty of accomplishments under my belt. I had an extensive portfolio, a long list of happy clients, and plenty of my own personal projects. But for some reason, that fear was still there.

Getting over the fear

Eventually, I had a project come up in my freelance world that I knew I couldn’t handle myself. The agency I was working with at the time had another developer that I was going to work with. Logically, I knew it would be okay. But, panic still set in. And I had to face it straight on. And guess what. The project went great.

Come to find out, this developer was far more advanced with JavaScript than myself. But I wasn’t exposed as a fraud or banished from the web development community. Instead, he offered some advice about parts of my code – which lead me to become a better developer. And on top of that, I was able to give him some advice about working WordPress.

Who would have thought… I was able to teach him something. To this day we still exchange emails and offer each other advice. When I have a JavaScript question he’s usually the first guy I ask. And when he has a WordPress question, he doesn’t hesitate to ask me for help.

Looking Back

Now, a couple of years later, I look at that first project as a significant turning point in my career. That’s when I started to collaborate. It wasn’t until I started working with other developers that I really began to pinpoint my strengths and weaknesses. And I have found out that it’s extremely valuable to know both of those.

I will admit that I still get jitters every once in a while when I publicly share my code. But it’s usually followed by positive feedback. On top of the thank you’s, I’ve also received valuable feedback that has helped me learn new things.

So… What’s my point?

I am a firm believer that everyone can learn something from everyone. And everyone can teach something to everyone. I’ve heard other people talk about the Impostor Syndrome (or similar feelings), so it doesn’t only apply to developers. And I don’t think that it is uncommon.

I wanted to share my story, and urge other people to take a step out of their comfort zone. Whether you are a seasoned developer, or you’re just getting the hang of HTML and CSS, you can learn by sharing and collaborating. So put yourself out there!

Search the WordPress Codex from Alfred

Search WordPress Codex from Alfred

Search WordPress Codex from Alfred

Awhile back, Brian Krogsgard mentioned the productivity app for OS X called Alfred. Since then, I’ve found myself using it on a daily basis. A quick Google search will return a lot of great articles about Alfred, so I won’t go into depth here. But I did want to share one custom search that I find myself using fairly regularly.

Create a Custom Search in Alfred for the WordPress Codex

Throughout my day-to-day work I often reference the WordPress Codex. No matter how much I learn, I still find myself looking up function references. One of the great things about Alfred is that it allows you to create custom searches. That means that you can create a custom search to look up functions in the WordPress Codex. Just enter the following:


Alternatively, you can create it manually by following these steps:

  1. Open Preferences > Features > Web Search in Alfred.
  2. Click Add Custom Search in the bottom right.
  3. For Search URL enter:{query}
  4. For Title enter: WordPress Functions (or whatever name you’d like).
  5. For Keyword enter: wp (or whatever shortcut you would like).
  6. You can drag an icon to display with the search. I used the official WordPress logo.
  7. Click Save
  8. Call Alfred and try a search using your Keyword followed by a WordPress function name.

Again, this is only one of many things that you can do with Alfred. It’s a great app, and I highly recommend it. What do you think?

Why I Use and Recommend WP Engine for WordPress Hosting

WP Engine Homepage

WP Engine Homepage

The team over at WP Engine recently asked me if I’d be interested in doing a Q&A for their blog. I was more than happy to do so, and it got me thinking about their company and what they do. I’ve worked with a lot of different web hosts over the years and all of them have their pro’s and cons – whether it be pricing, support, server configurations, or just the overall experience.

I’ve had good experiences and bad, but WP Engine stands out as one of the best hosting providers that I’ve worked with. While I’ve had good experiences with other hosts, it’s rare to find a host that provides great service and holds each customer relationship to such a high regard. Here are just a few reasons why I host my WordPress sites with them, and why I recommend them when people ask.

Speed and reliability

The technology that WP Engine uses is designed specifically for WordPress, and their server stacks can handle any amount of traffic. I’ve seen some large traffic spikes in my analytics, but would have never known based upon the performance – which was still snappy and quick. They use top quality hardware, and spread web requests and database queries across multiple servers.

On top of that, you don’t have to worry about configuring any caching plugins. WP Engine uses technology that was created by their team called “EverCache”. They claim that this technology outperforms just about any caching plugin (including WP Super Cache and W3 Total Cache) and based upon the performance that I have seen, I believe it. And it’s all configured automatically – both server side and client side. You’ll still have to minify your scripts and stylesheets, but that’s a piece of cake.

If you’re looking for an example of these fast loading times, just check out the page load times on my site.

They offer a CDN

I haven’t seen any other host that offers a solid CDN right out of the box. WP Engine does. They work with NetDNA to provide a fast, reliable CDN. You don’t even have to get your hands dirty setting it up, as it is all configured automatically. This point could be bundled with the one above, because it also contributes to better speed and reliability, but I figured it was worth its own section.

Support is knowledgeable, helpful, and friendly

To me, support and communication is just as important as the technology. And again, WP Engine does a great job with it. Although they are not available 24/7 (except for emergencies), I have never had an issue waiting for someone to help me out.

Not only are they prompt, but they are also extremely knowledgeable. Their entire support staff is made up of WordPress experts. They’ve helped me tackle some issues and offered suggestions for problems that were caused on my end – not a lot of hosts will go above and beyond like that.

And to top it all off, they have always been patient and friendly whether it be via their Support Dashboard, Twitter, email or phone. I guess you could say I like those guys and gals.

One Click Staging Site

This is one of my favorites. WP Engine offers the ability to create an exact copy of your live site, at any time, with one click of a button inside your WordPress Dashboard. You can push your changes to this staging site, test things, break things… All without affecting your production site. When you are running a public facing site, this feature is priceless. You don’t have to be nervous updating themes or plugins, or making changes to your site. Try them on your staging site first, make sure they work, and then push to your live site. And you can reset your staging site at any time with one click. It’s awesome.

Git Integration

I use Git for version control, so I was happy when WP Engine fully integrated Git-Push-To-Deploy into their hosting platform. You can push changes to your staging site or your production site… or both. All you have to do is open a ticket with your SSH public key and which install you’d like to associate them with and then you can start utilizing all the Git goodness. Pretty rad.

Peace of mind

WP Engine secures every site they host. They constantly scan their servers and make sure no malware or security holes are present. They also fix your site if it’s hacked – for free. Backups and restore points are automatically created daily, and you can manually create one at any time with a couple of clicks. And this is included with any plan.

It saves time

With all of these features (and more) I find myself spending a lot less time with server issues and maintenance. WP Engine will even update your sites when a newer version of WordPress is available. For example, when 3.5 was released, I received word from WP Engine that they would be testing the latest version of WordPress, and then pushing the updates to all installs. They notified me beforehand so I was able to test 3.5 on my staging sites. After making sure everything was in working order, I easily updated to 3.5 on my production sites. It was the most seamless update I’ve ever completed. And for minor releases (3.5 to 3.5.1 for example) WP Engine handled it automatically without a hitch.

I don’t have to worry about taking manual backups, or regular server maintenance. They take care of it. Pretty rad.

They are active in the WordPress community

Another thing that I like is the fact that I often see WP Engine active in the WordPress community. Whether it be on Twitter, at WordCamps, or just exchanging ideas with other WordPress enthusiasts. Hell, I don’t even think Austin sleeps.

Affiliate Program

They also offer a very generous affiliate program. If you sign up for the WP Engine affiliate program you’ll receive a minimum of $150 per referral. It doesn’t matter which plan, the payout is at least $150+. I would recommend them either way, but it’s nice that they offer the affiliate program, too.

Note: The links to WP Engine in this article are affiliate links. It will cost you nothing extra, but I will make a commission if you buy hosting through them. Affiliate links or not, I stand by everything written here and would feel the same either way.

WP Engine – Conclusion

Suffice to say, I like the team and the service over at WP Engine. They offer solid WordPress hosting, awesome support, and they are easy to work with. Go check them out. And if you’re looking for hosting now, they’re offering two months free when you prepay for a year. They don’t lock you in to any contract, and they also offer a 60-day money back guarantee. So if you’re unhappy, you can get a full refund.

Have you worked with them before? Or do you have a question? Whether positive or negative, let me know in the comments below.

Set WordPress Featured Image as Facebook Thumbnail

If you have a WordPress blog, odds are that you are sharing your posts on Facebook and other social media websites. Some of these sites allow you to include a thumbnail image and description when you or your visitors share posts. For example, when you paste in a URL on Facebook or LinkedIn they will pull an image (if available) and description from the page. At first glance, it may appear that you don’t have much control over this.

However, both Facebook and LinkedIn utilize the Open Graph Meta tags (For more info about the Open Graph API in general, check out David Walsh’s Facebook Open Graph META Tags article.). If you take advantage of this, you can control which image and description is pulled by default.

How can I use Open Graph Meta Tags with WordPress?

It is a pretty straightforward process to add the required meta tags. First, we need to allow for Facebook markup in our opening HTML tags. In this example we are going to add a few filters in our functions.php  file to accomplish this (Note: you could also add the appropriate code to your header.php):

add_filter('language_attributes', 'add_og_xml_ns');
function add_og_xml_ns($content) {
  return ' xmlns:og="" ' . $content;

add_filter('language_attributes', 'add_fb_xml_ns');
function add_fb_xml_ns($content) {
  return ' xmlns:fb="" ' . $content;

Now we can add the Open Graph meta tags just like regular meta tags and use WordPress’ Template Tags to fill them in. Here’s an example:

<meta property="og:title" content="<?php the_title(); ?>"/>
<meta property="og:description" content="<?php echo strip_tags(get_the_excerpt($post->ID)); ?>" />
<meta property="og:url" content="<?php the_permalink(); ?>"/>
<?php $fb_image = wp_get_attachment_image_src(get_post_thumbnail_id( get_the_ID() ), 'thumbnail'); ?>
<?php if ($fb_image) : ?>
	<meta property="og:image" content="<?php echo $fb_image[0]; ?>" />
<?php endif; ?>
<meta property="og:type" content="<?php 
	if (is_single() || is_page()) { echo "article"; } else { echo "website";} ?>"
<meta property="og:site_name" content="<?php bloginfo('name'); ?>"/>

Most of the tags are pretty self explanatory, but feel free to ask questions if anything is unclear.  If you wanted to avoid touching your theme files, I’ve packaged this into a simple plugin that you can use as a starting point.  You can see the full code for the plugin here (the zip also contains a screenshot and a readme):

Plugin Name: Facebook Featured Image and Open Graph Meta Tags
Version: 1.0
Plugin URI:
Description: Automatically set the posts' Featured Image as the thumbnail and set appropriate Open Graph meta tags for sharing on Facebook.
Author: Ryan S. Cowles
Author URI:

define ('pluginDirName', 'fb-featured-image');

// Allow for Facebooks's markup language
add_filter('language_attributes', 'add_og_xml_ns');
function add_og_xml_ns($content) {
  return ' xmlns:og="" ' . $content;

add_filter('language_attributes', 'add_fb_xml_ns');
function add_fb_xml_ns($content) {
  return ' xmlns:fb="" ' . $content;

// Set your Open Graph Meta Tags
function fbogmeta_header() {
  if (is_single()) {
    	<!-- Open Graph Meta Tags for Facebook and LinkedIn Sharing !-->
		<meta property="og:title" content="<?php the_title(); ?>"/>
		<meta property="og:description" content="<?php echo strip_tags(get_the_excerpt($post->ID)); ?>" />
		<meta property="og:url" content="<?php the_permalink(); ?>"/>
		<?php $fb_image = wp_get_attachment_image_src(get_post_thumbnail_id( get_the_ID() ), 'thumbnail'); ?>
		<?php if ($fb_image) : ?>
			<meta property="og:image" content="<?php echo $fb_image[0]; ?>" />
			<?php endif; ?>
		<meta property="og:type" content="<?php
			if (is_single() || is_page()) { echo "article"; } else { echo "website";} ?>"
		<meta property="og:site_name" content="<?php bloginfo('name'); ?>"/>
		<!-- End Open Graph Meta Tags !-->

add_action('wp_head', 'fbogmeta_header');

And you can download it from the WordPress Plugin Repo: Facebook Featured Image and Open Graph Meta Tags

Things to consider:

A lot of plugins and themes already include some or all of this functionality. For example, WordPress SEO by Yoast takes care of this for you. A lot of themes will also do this by default. To avoid redundancy you should check to see if the Open Graph tags already exist on your site. All code contained in this post is to be used on an “As-is” basis, and may contain errors. If you notice any, let me know!


How to include hashtags with Facebook’s share function

A little while back I ran into a problem when trying to allow users to share a page on Facebook. I wanted to include hashtags with Facebook’s share feature in the URL. The page loaded content via AJAX, and appended a fragment identifier (#) and a short string to the URL. When user’s tried to share this page, the hashtag and the rest of the string was being stripped. A quick Google search pointed me to a post on StackOverflow that revealed that I wasn’t the only one who couldn’t figure this out.

After pulling out my hair, the answer came to me. Encode the hashtag – replace # with %23 in the URL. For example, replace:


This may seem simple – and it is – but hopefully it can save you from some unnecessary frustration.

My experience with Website Movers

I have been maintaining a WordPress install that outgrew it’s shared hosting plan. I opted to move to WP Engine, as I’ve worked with them a lot in the past and have always been very happy with their service (Note: WP Engine is not at fault here, Website Movers is a third party.). The site I was planning to migrate was decent size (~1,500 posts spanning several years with pictures, media, etc.) but nothing out of the ordinary. I wanted to save some time and make sure the migration went smoothly, so I opted to outsource it. WP Engine recommended using Website Movers for the migration. Website Movers estimated the process would take 2-3 hours, and WP Engine comps the first two hours. So, it looked like we would be paying for 0-1 hour of work at $109/hr. We decided to move forward.


Prior to migration, Website Movers suggests running a plugin called WPEngine Ready. This plugin looks through your install and alerts you if there are any plugins that WP Engine disallows. I ran the plugin and made sure that my install was compliant with WP Engine’s hosting. Easy enough.


Website Movers started the migration – Dumping the database, downloading all the front end files, etc. They then setup a test server. I was able to view the test server and make sure everything was working. After confirming that it was, we set aside a time to complete the migration. The final step would be to update the DNS records to point to the new hosting. They told us that DNS propagation would take 1-6 hours. We arranged a time to do so (a Friday). I made sure all of our authors would NOT make any changes for the entire day Friday to ensure the DNS information propagated.

They said they made the change on Friday before noon:

[Website Movers] Fri, 2 Nov at 11:46am
Hello Ryan,
I’ve finished the database sync, but the website content synchronization still in process. I’ve already switched the DNS. Please note the DNS changes may take up to 4 hours to propagate all the world.
Thank you.

The Results

Monday morning came around, and the site was still not pointing to the new hosting. I sent a message to them letting them know that it had been 72+ hours since they should have made the DNS switch but nothing had happened. I didn’t get a response. However, 15 minutes later, our entire website was down with a general Server Error. I got on the horn with them (after multiple attempts – they were having phone problems, as well) and told them the situation.

They told me to purge my browser cache, as it was working on their end. I purged my cache, and still nothing. I also got confirmation from three of our team members working remotely who said the entire site was down for them as well. I contacted Website Movers once again, and they said they would look into it.

They did manage to get the site up and running, but were unable to tell me what the problem was. At this time, the URL’s for our subpages were incorrect as well – After fixing that, they said it was a “gesture of good will”… Personally, I thought that was part of migrating a site. On top of that, some of our content was missing. I told Website Movers this, and they offered the following reply when asked if they could sync the data (as that was part of our initial agreement). I received the following response:

[Website Movers] Mon, 5 Nov at 12:09pm

We will need 1 additional hour approved ($109) to backup the configuration and perform the sync today. Please let me know if you wish to proceed.


They wanted $109 to fix something that should have been done as part of the migration. That didn’t seem very fair to me. I then sent them the following message:

Mon, 5 Nov at 12:38pm via email
Hi [redacted],

What was the server error then? The migration was not completed Friday as
was agreed upon.


And they said:

[Website Movers] Mon, 5 Nov at 12:53pm

The server error at your website was related to the plugin jetpack which is not compatible with your hosting account.


That seemed strange to me, as I ran the WPEngine Ready plugin and Jetpack never brought up a warning. I checked WP Engine’s disallowed plugins list and Jetpack was NOT on there. Jetpack is actually endorsed and curated by WP Engine. They blatantly lied to me about the issue.

I followed up:


I just wanted to say that Jetpack is not on the Disallowed Plugins list for
WP Engine. In fact, it is actually on their Curated Plugins list:

Could you please investigate and let me know what the issue with the
transfer was?


And they responded:

[Website Movers] Mon, 5 Nov at 6:19pm

Unfortunately we cannot continue working on your migration project unless you wish to approve some additional time. Please let me know if you have any questions or wish to discuss this with our sales representatives.

Thank you.

So… Not only can they not provide me with an answer as to WHY things went wrong, but they won’t even talk to me. I got on the phone again. I was told that a senior tech support agent would call me in 30 minutes. Four hours went by and I didn’t hear a thing and Website Movers had since closed for the day. I spent the rest of the night manually migrating content from our old install to the new.

The next morning I did get a call from one of their senior tech reps, and he did genuinely try to help. He investigated things on his end, but still couldn’t seem to provide any answers. He said that he would comp us one more hour of work for migration… But when I asked how much time total they needed, he then estimated it would take 3-4 additional hours. By this point, I had already migrated the remaining content manually myself, and I had wasted far too much time on the phone getting the run around. I decided to cut my loses.

Website Movers Review Conclusion

I understand that with anything web related issues can arise, and there is no bulletproof way to migrate a website. DNS records can take awhile to propagate, servers can get disconnected, etc. But the lack of accountability on Website Movers’ end is what frustrated me. The amount of time wasted on both sides could easily have been avoided if they were upfront about the issue and willing to work with me. Instead, they just denied everything.

I did talk with one of the execs at Website Movers, and shared my frustrations. He told me that he was sorry I had a bad experience, but when it came down to it, I got a free migration (Because WP Engine comped the first three hours). That irked me. It wasn’t free. I spent more than two full working days to solve this issue. I also had to manually complete parts of the migration myself.

I don’t like to badmouth anyone, but I felt that other people should be aware of this experience. Granted, even with my complaints, this was one isolated incident. Have you had an experience with Website Movers? Good or bad, I would love to hear.

Add a category image to a WordPress loop

I recently wrote an article for Search Engine People on how to set a fallback image for featured images. Shortly after writing that I ran into a situation on my own site that required a slightly different solution. Instead of grabbing the first image from the post as a fallback, I wanted to set a fallback based on category. For example, if I have a post in my WordPress category that doesn’t have a featured image set, the WordPress logo will accompany the excerpt in the loop by default. I was able to accomplish in just a few short steps. I’ll show you how to add a category image to a WordPress loop.

Category Images

First, I had to create the images I wanted to use for my categories. I saved them all as JPG‘s with the category slug as the filename (e.g., wordpress.jpg for my WordPress category and web-development.jpg for the Web Development category). I then uploaded these to a new directory called cat-images in my theme’s images folder.

Calling Category Images in a Theme

Now the images are uploaded, but we still need to call them in our loop. If you are trying to insert them in your main blog feed you will probably find the loop in loop.php, home.php, front-page.php, or index.php.

First, let’s see if our post has a featured image set for it. If it does, let’s return it and be done with it:

<?php if (  (function_exists('has_post_thumbnail')) && (has_post_thumbnail())) : ?> //Check to see if a featured image is set
		<?php the_post_thumbnail('blog-thumb', array('class' => 'blog-thumb')); ?> //If so, let's return it

Then, if the post doesn’t have a post thumbnail associated, let’s grab the corresponding image we uploaded:

<?php else : //If there is no featured image set for the post do the following
		<img class="cat-thumb" src="<?php echo get_template_directory_uri(); ?>/images/cat-images/<?php $category = get_the_category(); echo $category[0]->slug; ?>.jpg" /> <!-- Pull the corresponding image in your theme's /cat-images/ folder !-->

After that, we just have to close our if statement:

<?php endif; ?>

Now, let’s put it all together:

<?php if (  (function_exists('has_post_thumbnail')) && (has_post_thumbnail())) : ?> 

		<?php the_post_thumbnail('blog-thumb', array('class' => 'blog-thumb')); ?>

	<?php else :?>

		<img class="blog-thumb" src="<?php echo get_template_directory_uri(); ?>/images/cat-images/<?php $category = get_the_category(); echo $category[0]->slug; ?>.jpg" /> 

<?php endif; ?>


If you don’t want to use featured images in your loop, and instead just want to return the category image for all posts, you can strip out most of the code and just use the following:

<img class="blog-thumb" src="<?php echo get_template_directory_uri(); ?>/images/cat-images/<?php $category = get_the_category(); echo $category[0]->slug; ?>.jpg" />

Things to Watch For

If you see broken images shown in your loop, there is probably an incorrect path or filename somewhere. Make sure that the folder name in your theme’s directory matches the exact name and path as in your loop. Also, make sure the filenames of pictures are the exact category slugs (Pay attention to capitalization and file extensions).


Now, whenever you have a post with no featured image set, it will return the corresponding category image. Want an example? Just check out my main blog page. Have you done something similar, or have another way of doing this? Let me know!


WordPress Codex: has_post_thumbail
WordPress Codex: the_post_thumbnail

Set a fallback image for WordPress Post Thumbnails

I recently wrote this article for Search Engine People, and figured that others may find it useful. It explains how to set a fallback image for WordPress Post Thumbnails.


One of the countless things that I love about WordPress is how easy and efficient the process of adding new content is. All you have to do is provide the art and copy and your theme will take care of the rest. While this workflow is usually smooth, there are times the end user can miss a step or two. I’ve noticed when working on larger sites with multiple authors one of the most common things to slip through the cracks is setting a featured image. While this shouldn’t break your theme, it can create layout inconsistencies or (shudder) broken images. Lucky for us, we can easily provide a fallback, and I’ll tell you how.

WordPress Post Thumbnails

Post Thumbnails were introduced in WordPress 2.9 [Source: WordPress Codex] and have since become somewhat of a standard for theme developers. If a theme declares support for this functionality, it allows authors to set an image that will represent Posts, Pages, or Custom Post Types. How this image is utilized is completely dependent on the theme. A lot of themes will use a featured image to accompany excerpts, but that’s just one example.

Read the rest of my article over at Search Engine People.

Hello world!

WordCamp Los Angeles 2012

WordCamp Los Angeles 2012I attended WCLA this past weekend and had a great time. It was my first WordCamp, so I wasn’t sure what to expect. I learned a lot, and met a ton of great people. I’ll definitely be going to more in the future.

The guys over at WP Engine hooked me up with a free hosting account, so I figured it was about time that I put together a brand new WordPress website for myself. While I will still [try to] maintain my photography blog over at Metacom Creative, I will probably be focusing a lot more attention on this site. You’ll find me building and breaking things and sharing what I learn in regards to WordPress and web development.