We’ve Migrated from Gumroad to Easy Digital Downloads

When we began selling products on roots.io in the summer of 2013, we went with Gumroad since it was really easy to implement and had a great user buying experience.

Gumroad is the perfect tool if you’re selling a single product by a single seller. In our case, we weren’t just selling products as "Roots". The products were actually split between myself, Scott Walkinshaw, and Nick Fox. That meant we all needed separate Gumroad accounts.

The major downside to this is there’s no way to make mulitple purchases at once across these accounts. There’s no "cart" functionality. If someone wanted to buy 2 or 3 products, they’d need to make 2 or 3 separate purchases which was annoying.

The other downside is the cost. Gumroad takes a 5% cut of your purchase plus a 25¢ transaction fee. The typical industry pricing is 2.9% + 30¢. Of course Gumroad does way more than just processing payments so its 5% is justified. But once your volume gets high enough, it’s worth it to save that extra 2%.

But more importantly, we wanted to make it easier for customers to purchase multiple items from us directly on our site. Our main goal is always the best and simplest buying experience.

We decided to switch to Easy Digital Downloads backed by Stripe to achieve this.

Selling products on a WordPress site

There’s a lot of options out there for selling products on a WordPress site, including:

I was about halfway through implementing Easy Digital Downloads when I started to get frustrated with customizing the front-end templates. I spent a day looking at other options, installing them, and comparing features.

At the end of the day, Easy Digital Downloads still seemed like the best fit. It’s also likely that we’re going to use some of the EDD extensions in the future and EDD has a great marketplace.

Making the EDD checkout look good

The checkout template that comes with EDD wasn’t good enough. We wanted to mimic the simplified Gumroad and Stripe checkout experiences.

Compare that checkout experience to Gumroad and Stripe:

EDD allows you to customize the checkout template by copying over templates/checkout_cart.php to your theme. The problem with this template is that it only includes code for one part of the checkout template: the cart table.

Any modifications to the checkout template below the cart table require the use of hooks, e.g. edd_purchase_form_after_user_info.

While EDD makes it easy to customize certain parts of the front-end, other areas require more work. This is a problem that exists in many WordPress plugins.

After removing a lot of the default fields from the checkout, I added jquery.payment from Stripe to make interacting with the credit card form a better experience.

Easy Digital Downloads and Batcache

We’re currently using Batcache on this site. In order to get Easy Digital Downloads to work nicely with Batcache enabled, we needed to two make modifications:

  • Exclude checkout pages from cache
  • Skip cache if edd_items_in_cart cookie exists

On L336, add the check for edd_items_in_cart:

-if ( ! in_array( $batcache->cookie, $batcache->noskip_cookies ) && ( substr( $batcache->cookie, 0, 2 ) == 'wp' || substr( $batcache->cookie, 0, 9 ) == 'wordpress' || substr( $batcache->cookie, 0, 14 ) == 'comment_author' ) ) {
+if ( ! in_array( $batcache->cookie, $batcache->noskip_cookies ) && ( substr( $batcache->cookie, 0, 2 ) == 'wp' || substr( $batcache->cookie, 0, 9 ) == 'wordpress' || substr( $batcache->cookie, 0, 14 ) == 'comment_author' || $batcache->cookie == 'edd_items_in_cart' ) ) {

On L333, above the "Never batcache when cookies indicate a cache-exempt visitor" comment, add the following:

// Never batcache /checkout/ pages
if ( substr($_SERVER['REQUEST_URI'], 0, 9) == '/checkout' )
  return;

Read the discussion on our Discourse

Get our latest updates & occasional tips on building better WordPress sites

Follow @rootswp on Twitter