Tutorials WordPress Tips

How to add proper pagination as default in WordPress themes

When you scroll to the bottom of an index page on a WordPress site, what do you see? Chances are it’s two links, one saying “Older Posts” and one saying “Newer Posts”. Scarcely has any default setting been more engagingly uninformative, and unnecessarily so. This “let’s not tell the visitor where she is on the site nor how much other content is available” approach to navigation is the epitome of User Experience archaism and should be but a footnote in the annals of WordPress history. Instead it is a cornerstone of the free WordPress theme experience and the default setting for all baseline WordPress themes (_s included) with one groundbreaking exception: Twenty Fourteen.

It is time we the people who build WordPress themes cast aside the rotting corpse of Older and Newer posts and replace it with proper pagination. After all the function is already built into WordPress – in fact it has been for a very, very long time. So, without further ado let me provide you with the code you need to get started and a few tweaks to move your WordPress pagination into the 21st century.

paginate_links() – the old friend you never knew you had

You don’t need fancy plugins or custom code to get proper pagination in your index pages. The paginate_links() function will do that for you in a snap. Here it is in its most basic form, straight from the Codex:

global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
	'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
	'format' => '?paged=%#%',
	'current' => max( 1, get_query_var('paged') ),
	'total' => $wp_query->max_num_pages
) );

(If you’re wondering what the $big variable is for it helps output a clean URL when the page is loaded. Pay no mind.)

Slot this code into your template file where you want the pagination to appear (i.e. replace the current Older Posts and Newer Posts code with this one) and you’re good to go. If you want the basic solution that is. Which probably isn’t what you want.

Options Aplenty

Luckily for us we don’t have to be content with the default example above. paginate_links() has plenty of parameters we can use to change its output. The parameters you should care about from a design perspective are:

  • end_size: Decides how many numbers to display at the start and end of the list. Defaults to 1 meaning you’ll get output like this: 2 … 5 6 7 … 10. If you change the number to 2 you’ll get 2 3 … 5 6 7 … 9 10. You get the idea. Visually 1 looks best but in some cases you may want to change this value.
  • mid_size: Decides how many numbers to display on the left and right side of the current page (not including the current page). Defaults to 1. So if you set mid_size to 2 and are on page 6 you’d get 2 … 4 5 6 7 8 … 10.
  • prev_next: True or false decides whether a Previous and Next link should appear in the list or not. The actual wording is controlled separately (see below).
  • prev_text and next_text: The actual text output displayed if prev_next is set to true. Default output is « Previous and Next » and the strings are wrapped and prepared for translation.
  • type: Decides what the function outputs. The default plain outputs a list of anchor tags (links) which imo makes no sense. This can be switched to either array (great if you want complete control and know how to handle arrays in PHP) or list which outputs an unordered list and should be the default setting. I strongly recommend  setting type to list so you can work with the output in a reasonable way.

There are other variables but they are technical and control the functionality which I’ll address at the end of this article.

Upcycling existing code

Proper WordPress Pagination
So, let’s say you want to add pagination to your site (not unlike what you see directly above here) and you want to do it in a clean way. In that case it behooves you to create a function, stash it in functions.php or template-tags.php in your theme or child theme, and call it in when necessary. The easiest way to get this working, and working properly, is to upcycle the function provided in Twenty Fourteen and make some subtle changes to its output:


if ( ! function_exists( 'yourtheme_paging_nav' ) ) :
 * Display navigation to next/previous set of posts when applicable.
 * Based on paging nav function from Twenty Fourteen

function yourtheme_paging_nav() {
	// Don't print empty markup if there's only one page.
	if ( $GLOBALS['wp_query']->max_num_pages < 2 ) {

	$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
	$pagenum_link = html_entity_decode( get_pagenum_link() );
	$query_args   = array();
	$url_parts    = explode( '?', $pagenum_link );

	if ( isset( $url_parts[1] ) ) {
		wp_parse_str( $url_parts[1], $query_args );

	$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
	$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';

	$format  = $GLOBALS['wp_rewrite']->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
	$format .= $GLOBALS['wp_rewrite']->using_permalinks() ? user_trailingslashit( 'page/%#%', 'paged' ) : '?paged=%#%';

	// Set up paginated links.
	$links = paginate_links( array(
		'base'     => $pagenum_link,
		'format'   => $format,
		'total'    => $GLOBALS['wp_query']->max_num_pages,
		'current'  => $paged,
		'mid_size' => 3,
		'add_args' => array_map( 'urlencode', $query_args ),
		'prev_text' => __( '&larr; Previous', 'yourtheme' ),
		'next_text' => __( 'Next &rarr;', 'yourtheme' ),
		'type'      => 'list',
	) );

	if ( $links ) :

	<nav class="navigation paging-navigation" role="navigation">
		<h1 class="screen-reader-text"><?php _e( 'Posts navigation', 'yourtheme' ); ?></h1>
			<?php echo $links; ?>
	</nav><!-- .navigation -->


To make this work in a template simply call the function like this:

<?php yourtheme_paging_nav(); ?>

The function will output clean HTML markup with the pagination links wrapped in list items within an unordered list like this:

<nav class="navigation paging-navigation" role="navigation">
	<h1 class="screen-reader-text">Posts navigation</h1>
	<ul class='page-numbers'>
		<li><a class="prev page-numbers" href="http://localhost/page/7/">&larr; Previous</a></li>
		<li><a class='page-numbers' href='http://localhost/'>1</a></li>
		<li><span class="page-numbers dots">&hellip;</span></li>
		<li><a class='page-numbers' href='http://localhost/page/5/'>5</a></li>
		<li><a class='page-numbers' href='http://localhost/page/6/'>6</a></li>
		<li><a class='page-numbers' href='http://localhost/page/7/'>7</a></li>
		<li><span class='page-numbers current'>8</span></li>
		<li><a class='page-numbers' href='http://localhost/page/9/'>9</a></li>
		<li><a class='page-numbers' href='http://localhost/page/10/'>10</a></li>
		<li><a class='page-numbers' href='http://localhost/page/11/'>11</a></li>
		<li><span class="page-numbers dots">&hellip;</span></li>
		<li><a class='page-numbers' href='http://localhost/page/14/'>14</a></li>
		<li><a class="next page-numbers" href="http://localhost/page/9/">Next &rarr;</a></li>
</nav><!-- .navigation -->

Now all you need is some basic CSS to make it all look good:

/* =Index pagination
----------------------------------------------- */

/* The containing box with a nice white background */
.paging-navigation {
	font-family: sans-serif;
	padding: 1em;
	background: #fff;
	background: hsl(0, 0%, 100%);

/* Remove bullets and list indentation */
.paging-navigation ul {
	list-style-type: none;
	margin: 0;
	padding: 0;

/* Make the list items appear horizontally */
.paging-navigation li {
	display: inline;

/* Give each link and the current item some padding to make them easy to click */, {
	padding: .3em .7em;
	color: #333;
	color: hsl(0, 0%, 20%);

/* Link hover state */ {
	color: #000;
	color: hsl(0, 0%, 0%);

/* Current page bold and dark */
.paging-navigation .current {
	font-weight: bold;
	color: #000;
	color: hsl(0, 0%, 0%);

Of course you can elaborate on this to your heart’s content, but this is the gist of it.

Go Forth and Paginate

Now that you see how easy it is to add proper pagination to your WordPress index pages I think you will agree with me there is no good reason to keep the old Older and Newer posts links in place. If you don’t agree with me, by all means leave your disagreements in the comments below and let’s have a discussion. Otherwise, familiarize yourself with paginate_links(); and give your visitors a better user experience.

My Opinion WordPress

Will Flat-File Dethrone WordPress? Unlikely.

WordPress is out. Flat-file is the new wine. Or so the developer literati claim. I beg to differ. I also think these claims are an indicator of a serious problem with the open source industry: The people who develop Open Source applications are disconnected from the people who use their applications.

Flat-file vs WordPress: A 1 minute primer

If you’ve never heard of a flat-file before let me give you a quick primer: A flat-file is different from a “normal” CMS (like WordPress) in that it doesn’t use a database to dynamically generate pages. Instead it’s a hybrid model using JavaScript and other clever techniques to serve up individual or combinations of static files or pull content from content repository files (basically a spreadsheet or text file). The key here is flat-file solutions don’t need a database and usually don’t need PHP. (The historically savvy reader will now realize that flat-file CMSes are essentially static DWTs reinvented. That would be correct.)

There are some definite benefits to a flat-file (or what we old fogies call “static sites”) approach: You don’t have to rely on a complex server array for the site to work so your site won’t buckle under the sudden load of thousands of visitors, each page is an individual file so it will (at least in theory) load quicker, and you don’t have to deal with complex server management.

There are many flat-file solutions available and more coming online every day. This is after all the new wine for developers and everyone wants a taste. You have your CMS-style options like Ghost (originally proposed as a “simplified WordPress experience”), KirbyStatamic, and Jekyll – all of which have been lauded as “WordPress Killers“, and you have your externally hosted solutions like Harp (which uses DropBox as the file repository) and even DIY solutions that allow you to use Google Drive as the file repository. And you have services like GitHub Pages which let you use advanced developer tools to publish basic static websites.

And yes, I am aware there are a wide range of options here, that I omitted your favorite solution, and that my explanation is oversimplified. 

Ghost Face Killer?

When Ghost was proposed and then launched it was to much fanfare and celebration. Bold predictions were made of the imminent demise of WordPress due to Ghost’s simplified user experience and obvious appeal to bloggers. It’s safe to say these predictions did not correspond with reality. Why? Because setting up Ghost is not easy. In fact it’s quite complicated and requires a high level of expertise. Same with most if not all the other self-hosted flat-file CMSes. They may have a simplified file structure and user experience, but if people can’t figure out how to make them work, they won’t use them.

To curb this problem Ghost has launched a hosted for-pay service (though my theory is this was the plan all along) where you simply set up and pay for an account and start blogging. Which is no different from what, or Medium, or countless other hosted blogging services are already doing. So when flat-file becomes a hosted service the differentiation disappears.

“Kill your databases” they said. “It’ll be fun” they said…

One of the prime arguments for using flat-file is that you don’t need a database for most sites. It goes something like this:

“For a marketing site with 5 to 8 pages a database is just bloat. You’re better off just writing the code yourself.”

This is true in some cases, and if you are writing the code yourself you don’t need a flat-file solution either! However most sites today are not (or should not be) 5 to 8 pages even if they are marketing sites.

More than anything else the value of the web lies in the limitless potential for publishing. You don’t have to restrict yourself to a set number of pages or articles or images. You can publish as much as you want. And you should. The more quality content you publish, the more likelihood it will be seen, shared, and acted on. So when I see someone talking about a 5 to 8 page marketing site and the lack of need for a database my first question is “what about the attached blog?” There are very few cases I can think of where adding a blog with constant updates to a site would be a bad idea. In most cases adding such a blog can be a tremendous benefit to search and share traffic and the blog can even become the primary marketing tool. And once you have a blog and comments and other things you are moving into database territory. Sure you can use a flat-file CMS for this but it’s not really a good idea.

The Reality Distortion Field

I believe the emergence of the flat-file CMS has less to do with a consumer need than a developer desire to create something new and dethrone the current King of the Open Source Hill. While the argument for these solutions is that proper CMSes like WordPress are too big and too bloated for most users the alternatives they offer are more complex and don’t address the main appeal of WordPress:

What makes WordPress so popular, and the reason a lot of developers hate it so much, is that anyone can do it. You don’t need to understand Git or Markdown or Node.js or even PHP or MySQL to set up, configure, and publish content with your own self-hosted WordPress site. A complete novice with limited web browsing experience and a credit card can get a shared hosting account and publish content on a shiny new WordPress site within half an hour.

WordPress is a tool for everyone.

The flat-CMS tools touted so aggressively by developers on the other hand are developer tools built for developers by developers. Don’t believe me? Pick a random person off the street and ask them when was the last time they did a Git commit or wrote something in Markdown. The real world user of WordPress is not a developer. The real world user is someone wanting to share their thoughts, ideas, images, or art with the world in a simple and easy way.

When a flat-file solution uses Git commits or Markdown or “write your own HTML” as a marketing tactic you know all you have to know: This is not for the people, it’s for the developers who built it.

Rumors of WordPress’ demise are greatly exaggerated

WordPress is not dead or even on the decline. And flat-file solutions are not a threat to its position at the top of the Open Source Hill. The real threat to WordPress is actually WordPress itself, and this is something I’ll write more about in the future. While the flat-filers are wrong in their claim that flat-file is easier or better than WordPress, they are right in that WordPress is getting too complex and too heavy. For WordPress to continue its growth and eventual takeover of the entire published web it needs to slim down and become more modular so it can address the needs of an ever more diversifying user base. And those who build their businesses and reputation on WordPress need to realize kindergarten is over. We are not just playing at this any more. Serious business relies on WordPress and WordPress is serious business.

I would love to hear your thoughts on this topic. Are you running a flat-file solution? Have you abandoned WordPress for something slimmer? Leave a comment and pipe in.



Start with a Theme: Twenty Thirteen – new course on

All new and totally free! The new Start with a Theme: Twenty Thirteen course from Morten Rand-Hendriksen and is here!

Hot off the presses my latest course Start with a Theme: Twenty Thirteen walks you through all the features of the new default WordPress theme released earlier this summer. Twenty Thirteen is blog-centric and focusses heavily on Post Formats. This short course shows you how to use the theme to its fullest and how to get the most out of the advanced Post Formats. If you are a blogger looking for a new look for your site, Twenty Thirteen may well be the way to go. Check out Start with a Theme: Twenty Thirteen on  and see if the new default theme works for you.


WordPress Plugins: SEO – new course on

SEO is a much talked about and often misunderstood topic for web designers, developers, and bloggers alike. In my new course WordPress Plugins: SEO I demonstrate how you can use two popular WordPress SEO plugins, All In One SEO Pack and WordPress SEO by Yoast, to boost SEO and social sharing on your WordPress site without turning to alchemy.

This is a short and straight to the point course that will get you up and on your way in just about an hour flat. It is also the first course in my WordPress Plugins series on which I am very excited about. If you have any plugins or plugin-type tasks you want to learn more about, let me know in the comments and I’ll put it on my list for a future course.

But for now, get your SEO in order with WordPress Plugins: SEO!

Speaking Engagements WordCamp

WordCamp Vancouver 2013: Speaking and Moderating

WordCamp Vancouver is returning to our fair city on August 17th. For the past two years I have been one of the organizers, but this year I am going to attend as a speaker and moderator instead. It’ll be a nice change of pace for me and it gives me an opportunity to share some insights about how I work with WordPress with the Vancouver community. Very exciting.

Can WordPress Really Do That, Take 2 – my talk

The title of my talk is, quite cryptically, “Can WordPress Really Do That, Take 2”. This talk is a follow up of sorts to a talk I did at WordCamp Victoria 2012 and will be a full breakdown of the process of building an extremely complex site. Since the site is still being built I’m not going to reveal what it is or what it entailed here (you’ll have to come watch the talk to get that info), but what I will say is that the talk will involve insights into everything from design, information arcitecture, working with clients, working with designers, managing unusual assets, to setting up custom post types, adding custom data points, importing enormous databases, creating custom searches and loops, and beyond. What can I say? It’s a complicated project.

Can WordPress Really Do That, Take 2 is a talk targeted at anyone working with WordPress professionally – be that as a content manager, a site owner, a designer, a developer, or all of the above. And yes, WordPress really can do that.

Running a WordPress Development Business – moderating a panel

The organizers have been kind enough to ask me to moderate a panel on running a WordPress business. This is going to be an exciting discussion with lots of valuable takeaways for everyone. The panel consists of four well established WordPress developers from Vancouver and beyond and I’ll make sure we get a lively discussion going about everything from managing clients to getting paid to hiring minions and building great sites.

If you have any questions, topics, or other things you want me to bring into the discussion, let me know either in the comments below or by harassing me on Twitter or sending me a message. The whole point of a panel discussion is for the audience to learn something new, so your input and participation is essential.

Come join the fun!

As of this writing there are still tickets available so whether you are a seasoned pro or you’ve just started looking at WordPress you should go get your ticket and join the fun. This is the event for our community, so go get your fill of WordPress and meet lots of new people who share your interest in open source and web publishing!



Blogging for Your Business – new course on

Tasked with creating a blog for your business and don’t know where to start? Look no further than my new course Blogging for Your Business. Whether you are creating a blog for a large company or for your own business this course will help you set up and execute a plan that will make your blog part of your business and marketing strategy.

In creating the course my primary target audience was the person in a large company who is tasked with creating a blog because “that’s what everyone is doing these days”. It focuses on planning and strategy as well as how to make the blog part of the business and the overall marketing strategy and even how to find value in something a lot of people imagine as a waste of time and resources.

Blogging for Your Business is a course focussed on planning and strategy. This was done because it is usually the planning and strategy part of the process that is left out when a new business blog is built. The course takes you through the planning process of creating a blog as part of your business marketing strategy. In it I provide a structured approach that divides the planning process into discrete stages, each with its own tasks and decisions. Through the course you are presented with key decisions, best practices, and expert advice that make you better informed and more equipped to build a blog that helps boost your business and its presence online. The course also shows how to set goals, delegate responsibilities, find a content niche, recruit contributors, and how to make technology decisions.

This is my first live action course and from a planning perspective it is also the most complex course I have created and I am very excited that it is now available for the world to see.

Watch the course and join the discussion about how to blog for your business!

If you do not have a account already and you want to know what we’re all about, go to for a free 7 day trial.


WordPress at 10: Time for a fork?

WordPress turns 10 years old this month, around the same time version 3.6 is set to release. Such a milestone deserves worldwide celebration as WordPress is now the most popular publishing application on the web. From an open source blogging platform, WordPress has grown into a mature Content Management System (CMS) with as many different uses as there are users. For many, WordPress has become the gateway to web publishing, and as a result has changed the face of the web. To call it impressive is a gross understatement.

But with great power comes great responsibility. This 10 year anniversary should also be a time for review, revision, and vision for the future. Should WordPress remain a one-size-fits-all CMS grown out of a blogging platform? Or is it time to rethink the structure of the application and modularize it to meet the demands of different user groups? I say it’s time for a fork.

Issues – The Why

The Fracture

Fractured landscape in grey tonesWith this growth, and the break-neck speed at which WordPress is currently evolving, there are bound to be hiccups along the way. Technical problems appear and are dealt with on an ongoing basis, but the problem I fear the most, the one we are quickly converging on, is a philosophical one:

In its quest for broad appeal, WordPress is becoming overgeneralized. I fear this may erode its foothold on the web and in the end break the application as a whole.

The problem is rooted in WordPress’ popularity. When the project began, WordPress had a neatly defined target user: The Blogger. But 10 years and 80 released versions later, the end user is no longer a homogenous group but a fragmented spectrum of users with widely different requirements and usage scenarios. WordPress is currently built to serve all these fragments, trying to do everything for everyone and as more complexity is added, it is slowly becoming a Jack of all trades but master of none. To misquote one of my favourite movies, “Overgeneralize and you breed in weakness.”

The Many Faces of WordPress

Looking at how people use WordPress today, one thing becomes clear: WordPress is different things to different people. You have bloggers who see it as a blogging tool, developers who use it as a CMS, themers who use it as a target application, large scale developers who use it as a core application for networks of sites, web hosts who use it as a hosted SAAS application, schools who use it as a social networking tool, enterprise clients who use it as a web publishing application, the list goes on.

Each of these scenarios have vastly different requirements, demands, applications, users, and target audiences. And yet they are all using the same application.

This is to the credit of the developers of WordPress. To build an application that can serve such a variety of usage scenarios is an impressive achievement. But when we look at how this came about, it is clear the current situation is sub-optimal.

As much as I hate to say it, WordPress is not really a CMS but rather an extremely built-out blogging platform. And because a large number of its users are bloggers, front end features are constantly added to help them. At the same time, new CMS features are added on the back end, allowing advanced developers to plug in and hook up. The end result is an application that grows in complexity with every iteration providing each individual user with an ever longer list of features she does not use nor need.

The tools and functions needed by a blogger are not the same as the tools and functions needed by a CMS developer. Or a network developer. Or an enterprise developer. But since the present goal of WordPress is to meet the demands of all parties, the application ships with everything for everyone, to the detriment of all.

Ant vs. Tank

Sit down with a novice WordPress user and you’ll see what I mean: What was once considered a simple and straight forward blogging tool has become a stunningly complex application with some blogging features. The novice user is often overwhelmed and this is usually followed by either frustration or overconfidence, both of which in turn lead to dangerous behaviour. The number of bloated, unsecure, spam infested, server killing WordPress sites on the web today is staggering, and it’s all because while we say “it’s so simple anyone can do it,” the reality is it’s so complex you need to be an expert to do it right.

I used to joke that using Drupal was a bit like killing an ant with a tank. Well, WordPress is starting to take on some pretty tank-ish qualities of its own.

Prongs – The How

So what do we do to solve this? How do we stake a path forward that meets the demands of a fractured user base while still retaining an agile core that continues to evolve with (or evolve *the*) web?

Here is my suggestion: I see WordPress stripped down to a core application with a series of prongs, each targeted towards a distinct user group or scenario. This can be done either through distinct forks or through plugins much like BuddyPress and e-commerce are being handled right now. The structure could look something like this:

WordPress Core (root)

WordPress CoreWordPress Core is the root branch on which all other entities are built. The Core consists of the most stripped down version of WordPress possible with core functionalities only.

Focus: Functions, security, and stability.

Target audience: Developers who don’t want any cruft but want to use WordPress as the base for applications.

WordPress for Bloggers (terminated branch)

WordPress for BloggersInspired by the front end of today WordPress for Bloggers is a simplified version of WordPress focussing on blogging features while disabling or hiding more advanced CMS features. UI is akin to rather than the current WordPress dashboard. New features like in-post editing and modal settings displays make it unneccessary for the average blogger to ever visit the admin interface.

Focus: Writing and publishing blog posts. Post Formats are front and center while features like custom permalink and front page setup are handled at setup with editing under a simplified Settings panel. Themes are handled through the Theme Preview and Customizer function. Advanced features like SEO integration and social buttons are built in. Security updates are automatic and a security checker is built in to alert site owners of possible security issues.

Target audience: Bloggers who want a low-touch plug-and-play solution with plenty of hand holding. There is little to no room for a novice to be dangerous in this environment.

WordPress CMS (branch)

WordPress CMSEssentially current WordPress with Custom Post Types and content management elevated to first rate citizenship. Content and settings is managed in admin. Blog-centric tools like Post Formats are relegated to plugins. WordPress CMS is close to what WordPress is today.

Focus: Extended functionality including modules / meta boxes, Custom Post Types, Custom Post Templates, advanced data handling, and extended user management including added roles and capabilities.

Target audience: WordPress designers and developers building advanced sites. Small and medium scale dev shops. Advanced site managers.

WordPress Enterprise (branch from CMS)

WordPress EnterpriseWordPress CMS with enterprise level security and compartmentalization at the core.

Focus: Security and scaleability.

Target audience: Enterprise developers and large-scale solution owners.

WordPress Network (branch from Enterprise)

WordPress NetworkNetwork installation of WordPress Enterprise allowing for sub-sites of either CMS or Blogger editions.

Focus: Scalability, user management, extsibility for social networks and forums

Target audience: WordPress Network managers, MU community, bbPress, BuddyPress etc.

WordPress Experimental (terminated branch)

WordPress ExperimentalBranch for experimentation and testing of new ideas.

Focus: New iterations and unexplored territory.

Target audience: Developers and those who see WordPress as a blank canvas.


Platform development would work as follows:

  • All branches are dependent on and built on top of WordPress Core.
  • Any update to WordPress Core is mandatory for all branches.
  • New features are developed against the appropriate branch.
  • When new features are pertinent to all branches they are published to Core.
  • New features can migrate backwards towards core or forwards towards branches.

This structure will allow for parallel development of new core and branch features while at the same time avoiding specialized branch features from bloating other branches or core.


This is a suggested draft map and outline meant to be the basis for a larger discussion about the future of WordPress. At the root of this discussion should be the end user – the person installing and running WordPress – and how to meet the demands of this person without bogging down other users in the process. To do this we need to identify who the target users are, how they use WordPress, what features they use, what features get in their way, and what features they need to move forward. It’s a complicated process and it will require a rethink of how WordPress is developed and used, but in the end I believe it will lead to a stronger platform with more opportunities for everyone who wants in.

Now it’s your turn. Discuss!

Further reading + relevant-ish links


WordPress Ecommerce: Easy Digital Downloads – new course

Hot on the heels of the release of WordPress Ecommerce: Core Concepts and WordPress Ecommerce: WooCommerce comes my third course in the series: WordPress Ecommerce: Easy Digital Downloads.

While WooCommerce is a full fledged ecommerce platform for WordPress, Easy Digital Downloads (or EDD for short) is built to sell digital products and services only. This means a drastically simplified user interface, no shipping options, and easier tax handling. If you want to sell digital products online Easy Digital Downloads is a great place to start.

Ecommerce in WordPress has long been at the top of my list of new courses to make at and the release of this course along with the precursor WordPress Ecommerce: Core Concepts make this a reality.

Be sure to watch the WordPress Ecommerce: Core Concepts course before embarking on this new course, and I recommend you also check out WordPress Ecommerce: WooCommerce to see what a more built out platform has to offer.

If you do not have a account already and you want to know what we’re all about, go to for a free 7 day trial.


WordPress Ecommerce: WooCommerce – New course

Did you know you could use WordPress to set up a full fledged ecommerce site? With WooCommerce you can, and my latest course, WordPress Ecommerce: WooCommerce shows you how.

Ecommerce in WordPress has long been at the top of my list of new courses to make at and the release of this course along with the precursor WordPress Ecommerce: Core Concepts make this a reality.

Want a simple way to make an ecommerce site that is easy to use, robust, and has almost endless opportunities for expansions? Look no further than WordPress Ecommerce: WooCommerce. And remember to watch the WordPress Ecommerce: Core Concepts course first to get a clear picture of what is required and what decisions you have to make before embarking on this adventure.

If you are looking to sell digital products and services only, check out WordPress Ecommerce: Easy Digital Downloads as well.

If you do not have a account already and you want to know what we’re all about, go to for a free 7 day trial.

video WordPress

Video hosting and WordPress: How to do it right

I’m getting questions about video hosting and WordPress on a weekly basis now so I think it’s time to publish an article about it. Here’s the most common question I get:

How do I upload videos to my WordPress site so I don’t have to use YouTube for my videos?

The answer to this question is “you don’t”, but that doesn’t really explain anything. So let me explain:

There are a myriad of reasons why you may want to host your videos on your own site: Maybe you don’t like the standard video hosting services. Maybe you don’t want your videos on YouTube or Vimeo. Maybe you want to restrict viewership to only specific visitors or paying visitors. All these reasons are perfectly reasonable. But the solution – to host the videos on your own server under WordPress – is ill advised and detrimental to your goals. In this article I’ll give you the reasons why you shouldn’t host videos on your WordPress site (or any other site for that matter) and then I’ll suggest what you should do instead.

Why you shouldn’t host videos yourself, part 1: Video files are big

Video hosting is complicated at the best of times. Let me illustrate why: Let’s say you have a standard 3 minute HD video. It is encoded in a standard video format (say MP4) and the total file size is 100MB (very small btw). You upload it to your server and use a plugin to embed the video in a player on your site. You visit the site and play the video and it works fine. What happens when you watch the video is your browser downloads the entire 100MB file and plays it. Now think about what happens if 10 people go to the site and try to watch the video at the same time: The server has to upload a 100MB file to 10 different computers at the same time so it is actually uploading 1GB of data. Now imagine if 50, or 100, or 500 people try watching that video at the same time. For every new person who watches the video simultaneously, the server will have a harder time getting the file to the viewer. The service will be slow, and after not too long you’ll get an angry call from the hosting provider saying you need to take the video offline.

You see most regular hosts are not designed to serve up video files. There are customized hosts that do this well, but they are few and far between.

Why you shouldn’t host videos yourself, part 2: Codec Fragmentation

The web is no longer restricted to desktop and laptop browsers. People access the web using smartphones and tablets as well, and TVs and game consols are now shipping with web browsers as well. What is not well known is that all these different platforms use different types of browsers and these browsers in turn interpret video differently. Back in the day (2 years ago), video on the web was pretty much displayed using either Flash or QuickTime. Today Flash has largely been replaced by HTML5 video, and each browser has its own preferred codec for this video format.

If you’re not a video geek like me that makes no sense so let me translate it into plain English: Different web browsers, on your computer and on tablets and smartphones, speak different video languages. And for whatever reason they usually only understand one video language. As a result if you only upload one video file in one language, anyone using a browser that speaks a different language won’t be able to see the video. That means if you want to host your videos yourself you have to upload not one file but five to cover all your bases: Ogg, WebM, H.264/MPEG-4, VP8, and Flash. This is the only way to cover all your bases and ensure that everyone can view the video regardless of what browser or device they are using.

Why you shouldn’t host videos yourself, part 3: Wireless data is expensive

Serving up a 300MB HD video file to a desktop computer with a broadband internet connection is no big deal. Serving up a 300MB video file to a smartphone is a disaster waiting to happen. Never mind that it’ll take forever to load and that the video format is wrong for the size of screen, but many smartphone data plans are only 500MB or 1GB, so downloading that file just 3 times could put the visitor over her monthly limit. Professional video hosting services like YouTube have systems in place to ensure that smartphones receive videos optimized for smartphones that don’t fry data plans. Doing the same with your self hosted videos is pretty much impossible.

The Solution: Use a professional video hosting service

I bet that right about now you are asking yourself “OK, so if I can’t host the videos on my own server, what am I supposed to do?” The answer is simple: Don’t reinvent the wheel. The problems above, and a myriad of others I didn’t mention, have been solved, and solve well, by several different companies over the years. And it would behoove you to take advantage of their expertise.

With the sudden popularity of online video, largely spurred on by YouTube, entrepreneurs came out of the woodworks to offer up alternatives with more control and less spam. These alternatives have now matured and deliver professional grade services at acceptable prices. And because of the popularity of WordPress, most of these services integrate seamlessly with the platform giving you all the control you need while at the same time staying clear of the YouTube trolls.

There are many services out there offering different types of services for different purposes so you need to do your research and figure out a) what you need and b) who provides those services at a price point you are comfortable with. (And yes, you have to pay for these services, but they are not all that expensive.) My recommended (but not exhaustive) list includes, in no particular order, VideoPress (by Automattic), Viddler, BrightCove, and Kaltura. All these services will provide you with secure video hosting that works the way your users will expect across all platforms and devices without server lag and other bandwidth issues.

Using videos in WordPress

How you use your videos in WordPress depends on the service you end up selecting. Some, like VideoPress, integrate seamlessly into WordPress with a plugin and all the work is done from within the CMS. Others, like BrightCove, have their own custom user interface and you embed the videos into your site by copying and pasting code. You can also use independent plugins like VideoJS to place hosted videos in your site. It’s really up to you.

But what about Amazon S3 / Azure / The Cloud?

You’ve probably seen people talk about video hosting on a cloud service like Amazon S3, Azure, or the likes. And yes, that can be done, and you can even overcome the issues raised above by using a service like ZenCoder to encode your video files to be served up to every possible browser and device. But the reality is this combination will be more complicated and cumbersome and probably more expensive than just using a professional video hosting service. It’s a question of simplicity and reliability.

If you don’t want to break the bank, just go with VideoPress at $59.97 / year and you’ll have all the frustration free video hosting you need. Or you can go with one of the other services for enhanced functionality. Just don’t waste your time on self hosted videos. It is not worth it.


Judging the App Pitch Vancouver 2013

Every now and again I get asked to participate in interesting events. The App Pitch which takes place in Vancouver on March 13, 2013 is no exception. I will be part of the 6 person panel that will be judging pitches for new Windows 8 apps from developers and students. Up for grabs is a $500 gift card and tickets to the upcoming Polyglot {Un}Conference. It’s all going down at Lauch Academy in downtown Vancouver.

From the official event description:

During Round 1 (The Round Robin Pitches), teams will be broken up into groups to take turns pitching their app in three minutes to the judges assigned to that group. As a group, the judges’ job is to select the Top Six Finalists to go to the Final Round and pitch in front of the entire audience. The judges will be basing their selection on the following criteria:

  1. The “Great At” Statement
  2. The App Design
  3. The Business Side a.k.a. Making Cake

The judges are Boris Mann, Tea Nicola, Kharis O’Connell, Richard Smith, Richard Campbell, and myself.

Considering the goal of the contest it should come as no surprise that The App Pitch is hosted by Microsoft Canada, and based on previous events hosted by said multi-national software corporation it’s going to be a fun night with plenty of surprises.

If you want to take part there are still tickets available. You can also get more info over at

To be honest if I wasn’t a judge I’d be pitching my own app at the event. But I’m a judge so that would be weird.

What are you waiting for? Come up with a pitch and join in!

Internet My Opinion

Glass, Filter Bubbles, & Lifestreams – connecting the dots

Has Google ever guessed what you were going to search for long before you finished typing it out, even before you gave it enough information to really be able to make that guess? It’s uncanny at first, but it quickly becomes something you not only expect but appreciate. Because that’s what we want our digital tools and technologies to be: Instruments that guess what we want and give it to us as soon as, or even better before we ask for it. But are these tools giving us the information we are looking for of are they providing us with the answers they think we want even if that information is not actually what we should be receiving? And just as importantly: How do these technologies know what we are looking for and what kind of answers we prefer? And who controls, interprets, and protects that information and that process?


As I write this Google is in the process of rolling out a new type of technology that has the potential of changing our lives, our interactions, and our society in a fundamental way. That technology, obscurely named “Glass“, is designed to add a digital layer to our everyday lives, removing the abstraction of the screen by superimposing web-based services and capabilities onto the real world we see in front of us. Glass is a computer in the shape of glasses, providing a heads up display akin to what you see in video games but designed for everyday life. The stuff of dreams made reality. The tech world is not surprisingly raving about this new leap in technological advancement. Wearable computers have long been the Holy Grail for tech enthusiasts and the potential inherent in this technology has long been a favored topic among science fiction writers and technologists alike. Used for good the technology Glass represents could be of tremendous value and benefit to us all. I can think of thousands of situations where Gass could be useful, essential, even required. And that is undoubtedly the intention of its creators: To make live easier, better, more enjoyable. But whatever its intention, this technology could easily end up augmenting our reality and our lives in a very real way that makes Orwell’s dystopian predictions of Big Brother a rosy fairytale. And the alarming part is we wound’t notice it was happening because it already is.

The Map of You and Me

Take a step back and think about how you use the web today. No longer just an information hub the web has become the medium on which we conduct a large percentage of our communication. In the past you probably used Google mainly for search, but today you likely use it for your email, chat, social networking, video consumption, and more. And Google is but one of many vendors for search and web services. Facebook, Microsoft, Twitter, Pinterest, all of these services have been adopted into our everyday lives under the auspice of making our lives simpler and more informed. But what happens behind the scenes? How is it that these services are so good at guessing what we want and serving our social, informational, and entertainment needs? It’s because every time we use one of these services that service in turn gathers, stores, and interprets information about us and our behaviours. And the more information is gathered and analyzed, the better the algorithms get and the better the services get at predicting our behaviour. Every email you send, every Tweet or Facebook update, FourSquare check in, every watched YouTube video, comment on Google+ or simple text search in a search engine becomes part of a personality profile. And every future action on these services is impacted by this profile. If this was happening in the real world we would be alarmed. When Target started profiling its customers and was able to predict a customer’s pregnancy before her family, it sparked an outrage. But our online services have been doing this for years and have eased us into it so that rather than questioning what is going on we not only accept but expect it. We have implicitly allowed large data mining corporations to start the biggest mapping of human behaviour ever undertaken, and done so without asking questions about why they are doing it and what this information is and will be used for.


On the face of it all this may seem to be OK. If a personality profile means the services you use online can predict what you are doing and simplify your life accordingly, what’s wrong with that? The problem is that the main purpose of these services is not to help you but to keep you using the service and be influenced by it and things like advertising in the process. So instead of providing you with the information you are looking for, they provide you with the information they think you will like the most and therefore return next time you want information. When you make a search on a search engine or open Facebook you are not presented with an accurate picture of the online world. Instead what you get is a carefully crafted image skewed to match your biases and preferences, whether they be social, religious, ethnic, or political. A conservative christian white male will be presented with vastly different search results from those of a liberal atheist Asian female when entering queries regarding politics, religion, or ethnicity. And the search results they get will usually be ones that provide positive reinforcement to their views and ideals. This phenomenon has been called the Filter Bubble and it is something we as a society need to take a long hard look at.

In a nutshell Filter Bubbles are web based worldwide echo chambers that isolate ideas and protect their inhabitants from opposing or dissenting views. As a result when a person with extreme ideas goes to the web, he will find endless support for his ideas, even if those ideas are groundless, misinformed, and largely discarded by society as a whole. In a worst-case-scenario this informational bias can lead to a person becoming radicalized and a danger to society. In the last few years we have seen several instances where the filter bubble is likely to have had a part: In the USA a large portion of the populace believe in one of many unfounded and debunked conspiracy theories about President Barack Obama – that he is a Muslim, that he is not a US citizen, that he is a terrorist and so on. In Norway an ultra-nationalist right wing terrorist killed 77 people in an attempt to quash a political party he was convinced was trying to convert the country to Islam. And in the wake of the Newtown massacre that saw 26 killed, so-called “Truthers” used the web to promote a conspiracy theory that the attack was a hoax perpetrated by the government to bring forth stricter gun control laws. The common thread that binds these and other such instances together is that the ideas are perpetuated on the web and spread among like minded people. And once they are caught in a filter bubble they only find information that reinforces and strengthens these ideas. Google and other service provides claim they are taking steps to prevent this type of extremist bubble effect, but the principle of the filter bubble lies at the core of their services and will more likely get further entrenched than dismantled.

Your Lifestream, controlled

Looking into his crystal ball technologist David Gelernter is now predicting we are moving towards a future in which predictive search and input is coupled with real-time streaming of information producing a personalized information stream presented to us at all times. Considering the current bias in online information delivery, and the ever escalating data mining of our everyday lives, this is an alarming proposition at the best of times. When you add Google Glass and the inevitable Apple variety of the same product it becomes a nightmare Orwell would have thought too unrealistic to write, even as fiction. Consider a world in which a significant percentage of the population wore Glass or an equivalent product. They would be wired to the web and its services 24/7/365 and would send and receive a constant stream of information. At the other end all that information would get stored, parsed, analyzed, and used to guide the users through their lives. There are tremendous security and privacy issues here, many of which are addressed in Mark Hurst’s The Google Glass future no one is talking about, but to me the more alarming aspect is the potential this technology gives to large corporations, clever marketers, and even governments to influence and control our behaviour.

If you take a look at your life today you can see how much influence search and social sharing has on your decisions and your opinions. And these influences are already heavily curated to move you towards certain products, attitudes, and behaviours. For now this is based on your interactions with computers, tablets, and smart phones. Now imagine what happens when you start wearing a device that provides this same type of information to you at all times. No longer abstracted to an external screen but added to your regular field of vision. And while you are consuming the carefully curated and controlled information fed to you, the device is recording your every move, every interaction, and every word spoken.

Brave New World of Glass

On a server somewhere there is a file with your name on it with more information about you than you have on yourself. The server can predict your every move with impressive accuracy, it knows where you are, where you are going, and who you are interacting with. And at every turn in your life it will use this information to try to influence your decisions and your actions. This is not science fiction nor the future. This is happening today, right now, as you are reading this and considering who to share it with. Tomorrow it will be right in front of your eyes changing your reality. Big Brother could be so lucky…