Crucial skills for people who work on the web

Sideproject has written up a great list of skills for people who work on the front end of websites. It includes learning a CMS (I favor WordPress, in case you hadn’t noticed,) taking a thoughtful approach to front-end frameworks and CSS preprocessors, learning the details of Responsive Design instead of just how to hide pictures and change the navigation, and more.

We’re all working in a time when the role of a front-end developer is expanding. Being pretty good at HTML and CSS doesn’t cut it anymore. Sideproject’s post is a great guide toward beginning to think about the other skills you should master in order to be a highly versatile and employable designer/developer.

Original post:


Lower the WordPress SEO meta box priority

WordPress SEO by Yoast is a great plugin, but its meta box gets high priority on your post edit screen and that can be a little annoying–particularly when it shows up in the middle of your other meta boxes. Fortunately, Yoast has put a filter in place so you can adjust the priority.

To lower the priority of the WordPress SEO meta box, you can put the following code in your theme’s functions.php file:

function lower_wpseo_priority( $html ) {
    return 'low';
add_filter( 'wpseo_metabox_prio', 'lower_wpseo_priority' );

Pretty simple fix for a common annoyance.

Convert OpenWeatherMap’s Kelvin temperatures with PHP’s API returns temperatures in degrees Kelvin, which is probably the best temperature scale for scientific use but is meaningless to most people in day-to-day life. Here are a couple of functions to convert it to your temperature scale of choice:


function k_to_f($temp) {
    if ( !is_numeric($temp) ) { return false; }
    return round((($temp - 273.15) * 1.8) + 32);


function k_to_c($temp) {
	if ( !is_numeric($temp) ) { return false; }
	return round(($temp - 273.15));

If you want to preserve decimal points, you can remove or modify the round() function to get the level of precision you want. Personally, I’ve never found decimal places in temperatures useful day-to-day.

Import multiple WordPress posts with the same name

By default, the WordPress import plugin will not create multiple posts with the same name which were created on the same date. I’m not entirely certain why this is the default, non-configurable behavior but in an era where WordPress is so much more than a blogging engine there is no limit to the number of cases where it isn’t desirable. Maybe you have a post type for business locations that is arranged hierarchically and each location has a child page called “Contact Us.” Maybe a hundred other things.

In such cases, I’ve found moving a site from my production server to the live server is problematic, because the WordPress Importer plugin discards all but the first instance of a post. Fortunately, this behavior is easily changed with a small modification to the WordPress Importer.

When the plugin iterates through all of the items in the import file, it checks to see whether or not it should create a post for the current item. It only takes a minor tweak to make it always create the post.

In your plugins directory, find ./wordpress-importer/wordpress-importer.php and look for the following bit of code, currently on line 557 as of plugin version 0.6.1. In future versions the location might be different or it might be rewritten. I’ll try to keep this article up-to-date:

$post_exists = post_exists( $post['post_title'], '', $post['post_date'] );
if ( $post_exists && get_post_type( $post_exists ) == $post['post_type'] ) {

Simply modify that as follows, and WordPress will create all posts as defined in the import file:

$post_exists = 0;
if ( $post_exists && get_post_type( $post_exists ) == $post['post_type'] ) {

By setting $post_exists = 0 you are telling the importer that the post doesn’t exist, which makes it work the way you probably want it to. I hope that this behavior will change (or be configurable) in future versions of the plugin, but for now this simple mod will get you going.

Redirecting from to a self-hosted blog

I am occasionally asked if Simple 301 Redirects will allow you to redirect your old blog on to your new self-hosted blog installed from It won’t but there’s an easy way to do just that.

Simple 301 Redirects only works if you can install it on the site you’re redirecting from. Since you’re redirecting from a blog you won’t be able to install my plugin there. What you can do instead is utilize a premium upgrade offered by called Site Redirect, accessible from the dashboard.

As of January 2014 it costs $13 a year. What it does is redirect all of the URLs from your blog to the same URL at a domain of your choosing. It is, in essence, a domain-level redirect.

How long should you pay for it?

Determining how long to keep your Domain Redirect in place depends on where your traffic comes from. You should be OK to cancel it after a year or two if most of your traffic comes from search engines. Search engines will see the 301 redirect and update their indexes.

If most of your traffic comes from inbound links on other sites you may want to keep the redirect in place indefinitely so those links continue working forever.

Redirect all 404 pages to your WordPress home page

I’m occasionally asked to redirect every 404 error on a site to the home page. There are a couple of reasons why you might not want to do this (see below) but there are also valid cases where it could be the right move for your site. If you’ve decided it’s the right thing to do, here’s how to accomplish it easily in WordPress:

Edit or create 404.php in your theme directory. Replace all of the content inside with the following lines:

wp_redirect(site_url(), 301);

And that’s all there is to it!

Why shouldn’t you do that?

There are a couple of reasons that redirecting all 404 errors could be problematic.

First, search engines are said not to pass all of a page’s link equity to the redirected page unless the content is very similar. So redirecting pages that used to rank well to the home page won’t work as a sneaky way to boost your home page.

Probably more importantly, though, is the fact that it will be difficult to monitor which links are 404ing since they’ll all just end up on the home page. The usefulness of Google Webmaster Tools and other methods of monitoring 404 requests is not just in preventing future 404s. The real power is that it helps you identify what your users are looking for and where they’re failing to find it. Fixing all 404s in an automated way makes that more difficult.

Avoiding Timeout When Exporting Large WordPress Sites

When exporting large WordPress sites with thousands of posts and comments, I occasionally run into an issue where the WordPress export tool times out before it’s finished building the XML export file. This can usually be remedied by updating the config files for Apache and PHP. Temporarily increasing the amount of time allowed for a single request should solve the problem. Note that you’ll need access to your server’s config files to make these changes. If you don’t have access, explain to your web host what you’re trying to do and they should be able to help you out.

Assuming you have access, here are some values that you can try:

In the Apache config file, try setting Timeout 300, which means that a single request is allowed to take up to 300 seconds to process before it’s shut down.

You’ll have to make a similar change in the PHP config file. That line will look like max_execution_time = 300. While you’re in there, you may also want to increase the maximum amount of memory available to PHP for a single request. memory_limit = 256M should do the trick.

After you’ve made your config updates, restart Apache so that they take effect. Now you should be able to export your site without any problems. Be patient, as it can take several minutes to export a large site. The values above will give you up to 5 minutes. If it takes longer than that, the process will continue to timeout and you’ll have to make the values even larger.

It’s important to note that after you’re done with the export you should change the settings back to their initial values. No ordinary request should take 300 seconds. Leaving the timeout values that high will allow poorly written scripts to tie up Apache processes for a long time, which will seriously impact your server’s performance.

Batch Convert Domain Names to IP Addresses

Last week I needed to check a large number of sites to see how many of them were still hosted by my employer’s legacy system. After clicking through about 80 of them I realized it would have been much smarter to just ping them and see what IP address they were living at. I looked for a tool that would do that for me, but didn’t find one that would accept a list of domains and look them all up at once. So I made one. may be a new favorite among my tiny web apps. It accepts a list of host names and looks up the IP address of the server each is pointing to. That’s it. Please enjoy this potentially useful app that does exactly one thing.

Super Easy WordPress Breadcrumbs

Here’s a simple script to generate breadcrumbs for any page or custom post type that uses parent pages to establish hierarchy. I’ve opted to only show breadcrumbs on pages that have at least one parent. If your page doesn’t have a parent, nothing will show up.

To get started, paste this function into functions.php:

function easy_breadcrumbs($post) {
    $parent_id = $post->post_parent;
    if ($parent_id == 0) { return false; }
    else {
        $output = '';
        while ($parent_id != 0) {
            $ancestor = get_post($parent_id);
            $output = '<li><a href="'.get_permalink($ancestor->ID).'">'.$ancestor->post_title.'</a></li>' . $output;

            $parent_id = $ancestor->post_parent;
        return '<ul class="breadcrumbs"><li><a href="'.home_url().'">Home</a></li>'.$output.'</ul>';

To display the breadcrumbs, paste the following code into your template inside of the loop:

<?php echo easy_breadcrumbs($post); ?>

Now you have an unordered list. To make it look like you’d expect, you’ll need a little css. Something like this should do the trick:

.breadcrumbs {
	padding: 0;
	margin: 0;
.breadcrumbs li {
	display: inline-block;
	list-style: none;
.breadcrumbs li + li:before {
	content: ">";
	display: inline-block;
	margin: 0 .4em 0 .2em;

Get Just The Path from a Request in PHP

It can be a little tricky to get just the path of a request in PHP. $_SERVER['REQUEST_URI'] includes the query string. $_SERVER['SCRIPT_NAME'] may return index.php instead of the request if you’re using a CMS like WordPress which rewrites URLs.

The most reliable method I’ve found for returning only the path without the query string uses PHP’s built in parse_url() function:

$path_only = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);