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);

Uptime Robot WordPress Plugin

I’ve been using a simple, free uptime monitoring service called Uptime Robot lately to monitor a few of my sites. It will check up to 50 sites every 5 minutes to determine if they are online or offline, log any downtime events, and optionally notify you when your sites are down, all for free.

I wrote a quick WordPress plugin which creates a dashboard widget with your most recent Uptime Robot log entries. You can either monitor your entire account, or a single site. Just add the correct API key to the settings page.

You can download Uptime Robot for WordPress from the official plugin directory or through your WordPress Admin.

Get An RSS Feed Of Your Youtube Subscriptions

Updated January 6, 2014 - This post has been updated to work with the latest changes to YouTube as of January 2014. I’ll try to keep it up-to-date with future YouTube interface changes.

Following the announcement that Google Reader will be shutting down, I’ve been looking for a new place to read my content. I’m still not sure where I’ll land on that, but the change has me thinking about how I consume content as well. I’ve decided I’d like to do more of it in fewer places (the goal of RSS to begin with.) To that end, I’ve added my Youtube subscriptions to my feed reader. Here’s how you can get an RSS feed for your Youtube subscriptions, too:

Make Your Feed Available

First, make sure your feed is publicly available. Go to http://www.youtube.com/account_privacy and uncheck “Keep all my subscriptions private.”

Get Your User ID

Next, get your Youtube user ID at http://www.youtube.com/account_advanced. You’ll see your YouTube User ID listed.

Finally, replace {USER_ID} in the following address with your own User ID and you’ll have an RSS feed for new videos from your subscription list.

http://gdata.youtube.com/feeds/base/users/{USER_ID}/newsubscriptionvideos

 

Updated Fluid App Userscript for Gmail Unread Count

Screen Shot 2012-12-19 at 9.39.48 AMI’ve been enjoying using a Fluid App for my Google Mail account and I bought the Pro version for $5, primarily so I could get a badge in my dock with a count of unread messages. Unfortunately, the script that ships with the app to display this account no longer works, likely due to changes in Gmail itself. The original script parses the very complex markup to get the inbox value. My simplified script just reads the window title to determine the unread count. Here’s how to install the script:

  • Window > Userscripts
  • Create a new script
  • Pattern: “*mail.google.com*”
  • Script:
window.fluid.dockBadge = '';
setTimeout(updateDockBadge, 3000);
setInterval(updateDockBadge, 15000);

function updateDockBadge() {
	var title = document.title;
	var regex = /s*Inboxs*((d+))[^d]*/;
	var res = title.match(regex);
	if (res && res.length > 1) {
		var newBadge = res[1];
		window.fluid.dockBadge = newBadge;
	}
	else {
		regex = /^Inbox -/;
		if(regex.test(title)){
			window.fluid.dockBadge = '';
		}
	}
}

How it works:

It reads the window title and detects if you’re in the inbox and if there’s a number representing unread messages.

  • If so, it puts that number in the badge
  • If not, but you are in the inbox, it clears the badge
  • If you are viewing a message it does nothing to the badge since the unread count only shows on the inbox

This is obviously less technically clever than a script that reads the inbox count from the page markup directly, but it’s much less likely to break with changes to Google Mail, and much easier to understand and therefore fix if something does break.

As an aside, if you’re looking for a fancy Gmail icon, check out this set in the flickr Fluid Icon Pool.

Update: This works if you use English language settings for Gmail. Otherwise, you’ll have to change the word “inbox” to whatever is appropriate in your language.

Zeitgeist.css Chrome Extension

I’ve put together a small Google Chrome extension which automatically adds Zeitgeist.css to any page which is unstyled. Install the extension here, or read on for more info. and source.

About Zeitgeist.css

Zeitgeist.css is a fun project started by Ryan Freebern which aims to create a default styling for web pages that reflects the aesthetics of the day, whenever that day may be. In Ryan’s word’s:

zeitgeist.css is a crowdsourced, extendable basic CSS file that imparts a design based on current design aesthetics to any simple HTML file, such as those produced by compiling markdown.

Think of it this way: If you make a web page and add no styles, it looks dated. Zeitgeist.css aims to bring those pages up to date easily. As easy as Ryan makes it, however, it isn’t automatic. That’s where this extension comes in. It checks every page using JavaScript’s querySelectorAll method to determine whether styles have been applied via a link element or a style element. If not, Zeitgeist.css is automatically applied.

Design Refresh

For the first time in years I’m making not-insignificant changes to the design of this site. The last design even survived a complete rewrite and update of the HTML. Now I’m adding a fresh coat of paint to complete the update. I’ll be iterating on this design for a while–consider it something of a live redesign. There may be a few rough edges, but I’ll try to smooth them out over time. Thanks for sticking around.

Advice for the Geographically Challenged Employee (AKA Working Remotely)

Ryan Irelan of Happy Cog recently posted about the challenges of working remotely as part of a team in the web development industry. I’ve got some experience with that; before moving back to Vermont I spent about a year working from an apartment in Florida, 1400 miles away from the rest of my team. A lot of what Ryan said resonates with my own experience. He touched on keeping a strict schedule for certain tasks and emphasizing certain types of communication to minimize interruptions and protect your time. He also talked about techniques he uses to avoid breakdowns in communication that can occur when you’re never face to face with anyone. He has some great tips that are probably almost as valuable if you do work with your team in an office.

I’ve got a few other tips that I’ll throw out, just for kicks:

Communication

Ryan touched on this. Use as many methods of communication as you need to make sure everyone is on the same page. Then take it a little farther. Know what everyone on the team is up to and let them know what you’re up to. Check in about non-work stuff, too (but only when it’s not going to be an interruption.) It’s tough to keep a good working relationship going via single-sentence emails.

Discipline

You may be working 6 feet from your comfy bed. You may be tempted to oversleep. You may have lots of great stuff to play with at home. You may have cool games on your computer that call to you. You may have friends asking you to hang out (you don’t really work, anyway. Right?) Ignore it all. Don’t fall into these traps. Don’t tell yourself “I can sleep in 10 extra minutes and no one will know.” It’s a slippery slope. You’re a professional and you should act exactly as you would in an office with other professionals. Arrange schedules to keep yourself on task. Always be available at the same time every day. Communicate often. Stay focused. Discipline is absolutely the key to working successfully when separated from your team by geography.

For me, keeping rigid discipline in my workday was the way to make sure I didn’t inadvertently abuse my employer’s trust or let down my team members. And it paid off. I was the most productive I had ever been.

Shoes

Seriously. I don’t remember where I read this tip originally, but it always helped me. Something about wearing shoes always made it feel like I was out of the house and into the office, even though I was working from my bedroom desk. If you’re struggling for focus, slap on a pair of shoes and tie them, tightly. This is not a joke.

Create a Static Splash Page in WordPress

I know, splash pages are wrong, evil, and will probably bring about the downfall of society. But what if you need one anyway? Say, for example, you are preparing to launch a site based on wordpress but while you’re still putting it all together you don’t want visitors poking around. How can you create a static splash page to tell people that your site is coming soon (whatever that means?)

I found myself in just that situation recently. I looked around for a plugin to let me replace my index with a simple html document for a little while. I may write one yet, but for now a beautifully simple solution is doing the trick. Here’s what to do:

  • Create a blank file in your theme directory and call it something like splash.php.
  • Make it a page template by pasting in the following:
    <?php
    /*
    Template Name: Splash Page
    */
    ?>
    
  • Write your static HTML. If you need to link to images or stylesheets, I suggest putting them in a subdirectory of your theme called something like splash. You can then reference them in your HTML using a bit of code like <img src="<?php bloginfo('template_directory'); ?>/splash/image.jpg" alt="" />. Notice the php which finds your theme directory for you so your theme remains portable.
  • Create a blank page and set it to use the custom page template you’ve created. You’ll find it under the Page Attributes menu. As of WordPress 3.1 it’s on the right side of the admin and looks like this image.
  • Under Settings > Reading set the front page to use a static page and select the new page you’ve created. The index of your website will now be your page template with no dynamic content and no other theme files included. Easy-peasy.

Because you never called get_header(), get_sidebar(), or get_footer() you can now have a totally static splash page while you’re tweaking a theme, editing content, and doing your WordPress business in secret behind the scenes. If you still want to pull in some content from WordPress (like the title and page content) you can even grab the loop from your existing page.php and use it in your splash page.

Simple 301 Redirects Version 1.02 (and 1.03) Released

I’ve released a bug fix version of Simple 301 Redirects for WordPress. Version 1.02 fixes a couple of bugs and 1.03 adds PHP4 support, which I carelessly neglected in 1.02. It seems that a lot of people still use PHP4 even though it’s been officially dead (i.e. unsupported and with no security updates) for over 2 years. You can get the latest version of the plugin by updating from your admin system or by visiting the WordPress plugin directory.