How to build a stock photo subscription site

Have you ever wondered how to build a stock photo subscription site? It's possible to do with WordPress. One of the questions I got two weeks ago focused on the kinds of sites like Shutterstock—which I use all the time—and whether it was possible to build a site like that on WordPress.

The answer is yes. 

Building a stock photo subscription site is not only possible but it's a lot easier than you might think. If you have the right tools.

Given how much I write about WordPress, it won't shock you that WordPress is one of the right tools. But you'll need more than that. You'll also need the following:

[tweet “You can build a stock photo subscription site easily with @eddwp”]

The total for the main plugin and three extensions is $235*. I know because I bought all of them the other night just to validate all of my thinking as I built a sample site to take screenshots for this post.

*Note: The prices for these extensions are the prices at the time of publishing. This site doesn't guarantee that they will match the price when you read this post. Additionally, the reason I recommend that you invest in the right tools to build this kind of site is that it's way cheaper than coding all of this yourself. If you hate that I recommend that you spend a little bit of money, please do it all by hand and write that blog post and I will gladly point to it.

Also, if you want to use Stripe as your payment gateway, you'd have to get one more extension.

Easy Digital Downloads was made for this

Because I write a lot about WooCommerce, it's normal to wonder why I wouldn't recommend WooCommerce for this kind of project. The answer is simple: Easy Digital Downloads was made to do this very thing.

The background on Easy Digital Downloads isn't a complex story. You'll see what I mean in a second.

  1. A developer wanted to sell digital downloads.
  2. That developer decided to create a plugin to do it.
  3. He wanted it to be easy.

The reality is that a stock photo subscription site, or any digital download subscription site, is really a perfect candidate for EDD, which is why I highly recommend it when trying to build this kind of system.

The project at a high level

To understand how to build this, you have to understand the key components of the system.

First, users must purchase a recurring subscription—using the recurring payments extension. This lets you build a digital download product that charges a customer every month.

Second, you must allocate a certain number of points for the money they've spent—using the points extension. This lets you create a credit system that they can use to download photos (or any other digital file).

Third, you must create all the digital downloads that you want users to be able to spend their points on. Done right, this provides incentive to purchase the recurring subscription.

That's really all there is. But let's walk thru some of these steps in more detail to understand the nuances of getting this all correct.

Install the plugins and extensions you'll need


You'll see that I have the plugins installed that I listed above. The one you can't see is a redirection plugin (that's free) that sends people back to the home page after they've created an account. You can read more about it on WP Beginner.

It's not in the list above because you don't actually need to use it. I started by using it, because I didn't want new customers to get taken to their admin-facing profile page (which is a WordPress default). Thankfully, EDD allows you to adjust it without the need of an additional plugin (see the last shortcode on that page).

In this case, I was using the Paypal gateway, but as I said above, you can do this with Stripe without any issues.

Once you've uploaded and activated the plugin, you'll likely want to configure the settings of the main EDD plugin, but there's already tons of documentation, so I'll leave that alone.

Next, configure the Points & Rewards extension

Everything about this kind of site is based on how you manage the points and rewards.

Getting the earn/redemption settings right

The structure of what you want to do is create the exchange rate for points based on dollars spent. Normally, sites that use this extension aren't creating this kind of subscription downloads site, so they do something like, get 1 point for every $1 you spend (which is the “earning” side of the equation) and then for every 100 points you have, you can get a discount of $10 (which is the “redeeming” side of the equation).

For this kind of site, we want our points to be used to redeem downloads, so we want the deal (or conversion dynamics) to be more in the user's favor.

Here's our example.


Let's say I want the user to spend $50 a month with me. But I want them to be able to download $100 worth of digital files. So I would make the earning be $1 = 2 points. And on the redeeming side, I would want it to be 1:1.

The result is that we're creating a program that would make it ridiculous to purchase 10 downloads individually (if they're $5 each) when they could subscribe and get 20 downloads a month.

Limiting what earns points

The challenge, as you might be thinking, is that if a user purchases a $5 download, they'd immediately get a 10 points of credit, which would be worth 2 more free downloads. You'd be right.

So what we have to do is make sure that when we're creating our digital download products (that isn't our subscription), we must make sure those products earn 0 points.


Additionally, we'll want to make sure we don't display the “you'll earn xx points when you purchase this” text on each product because it will always say zero. So below you'll see the “single product page message” blank. That's on purpose.


Earning points monthly

Our last step in configuring our points for this subscription site is to make sure that points are granted every single month at the start—based on the successful charge to the client. This gives them a whole new bucket of points to use every month.


That last chcheckboxs the critical one.

Create the recurring charge product

So with that core extension configured and with all our digital downloads set up to not add any points for each of their purchases, we've created the perfect system for allowing (in this case) up to 20 downloads a month.


You can, of course, design your own system with different values in the exchange and the “price” for each download to make it 30 or 300 downloads a month.

But all of that only matters if you create the core product that will earn them points every single month. That's why you want the recurring charge extension because it adds an area to configure it below the details of the digital download.


When it's all done right

When you configure those things correctly, you'll be able to watch users spend money ($50) on the monthly plan, which will earn them 100 points, which they can spend on downloads that might directly cost a price ($5) but with their points will be free.


You notice that the “Use 5 points for a $5 discount” message shows up in the cart below the digital downloads. This is perfect and allows us to apply the points to bring the cost to $0.


And that's what gives us the framework for a download-as-many-items-as-you-can site, based on a monthly recurring fee.

But wait, that's not exactly right…

Some of you that use Shutterstock or other sites like them will notice that I described a site more like PresentationLoad than like Shutterstock.

What if you never want someone to download any individual item for a price? Because in the scenario above, someone could still buy one download for $5 cash and never sign up for the subscription.

It's true. I've described one kind of metered-use subscription site and not the other.

But there's good news. Because you can easily make this solution match better.

  1. Keep the price on all of the downloads—it will work just like I've said above.
  2. Use the Content Restriction extension to limit product visibility to only those who've purchased a subscription.

Now we're talking, right?

Wrapping it up

You may also want to create a page where customers can see how many points they've already used up in a given month. That's easy to do. All you need is this shortcode: [[edd_points_history]].

That's it. Seriously.

And I should add, that if you get stuck on any of this, the benefit of paying for all those premium extensions is that you can contact the EDD team for support. And that's always a nice safety net.