If you are selling WordPress themes or plugins, no doubt you’re always looking for ways to add value to your product and encourage more sales. One common method is to create different plans for your product which limit the number of times a customer can activate it. However, this method can actually reduce your scope to increase your profitability.

In this post, I’m going to show you how you can use the Software Licensing extension for Easy Digital Downloads to make some features of your plugin available only to users on premium plans – and all without having to create and manage different versions of the product.

Why restrict features to certain plans?

Making certain features only available to higher license plans is an effective way of encouraging users to purchase or upgrade to a more expensive version, meaning more profit for you.

Activation Limit Model

Let’s say you have a WordPress plugin that creates a forum. You’re licensing it in an orthodox way, something like:

  • Single site license, $19
  • Two to five sites license, $29
  • Unlimited sites license, $35

We can call this the Activation Limit Model – you set your pricing according to how many times you allow your customers to activate your product. If a customer wants to create a forum on one site, they purchase the single site license; if they want to create forums on two sites, they purchase the next license up; and so on.

The problem with this model is that you don’t have much scope for encouraging your customers towards the higher level licenses: if they’re only going to use the product on one site, then they’re only ever going to spend $19. There’s no incentive for the customer to spend a little extra… unless you can add some additional features to the higher level licenses that aren’t available on the lower level.

Premium Feature Model

The Premium Feature Model augments and expands the freemium approach (whereby you offer a free version of your product then encourage users to purchase a more feature-rich version) and can easily incorporate the Activation Limit Model. But now, not only are you setting limits on activations, you’re also offering different feature levels to users as an incentive to spend more.

Under the Premium Feature Model, your licensing plans might look something like this:

  • Basic – the most basic premium version of your plugin, licensed for a single site, $19
  • Dev – additional features, licensed for between two and five sites, $29
  • Pro – all the features, licensed for use on an unlimited number of sites, $35

Now, even if your customer only wants to use your product on a single site, they may still be tempted to purchase the Dev or Pro version (or whatever you decide to name your plans) because they have additional features not available on the Basic plan. The prices themselves haven’t changed but the number of customers spending more should increase.

Creating product plans in Easy Digital Downloads

I’m assuming you are already using Easy Digital Downloads to create downloadable products that users can purchase and that you therefore know how to create new products. But if you do need help with this, there’s a very comprehensive support section on the EDD website.

Variable pricing

EDD allows you to enter variable pricing for each product. This means you can create different products plans or levels and assign different files to each variation.

For example, you could create three plans for your product: bronze, silver and gold. Bronze is priced at $10; silver is priced at $20; gold is priced at $30. In your dashboard, that would look something like:

EDD variable pricing

With your different plans created, you can choose which files to associate with each plan:

EDD download files panel

In this way, you can upload additional or different files for each plan, thereby providing users on higher plans with more features. So, if you want to restrict certain features of your plugin to Silver or Gold level customers, you can different versions of the plugin and associate them with the different price options.

Disadvantages of this method

No doubt you have immediately seen the disadvantages of trying to control your premium features in this way:

  • You have to manage different versions of your plugin
  • You have to make multiple uploads when your plugin changes
  • Potentially, your users will have multiple files to deal with, which will inevitably lead to more support calls

Advantages of this method

If you’re working within a tight budget, then this method might be fine for you as it only requires EDD, which is free. Also, by default, EDD encourages you towards the Premium Feature Model because it doesn’t have the functionality to deal with activation limits.

However, if you want to simplify the updating process for your product and you want to avoid working with multiple files and versions, you should consider investing in the Software Licensing extension.

Software Licensing and the Premium Feature Model

In case you didn’t know, Software Licensing is a premium extension for EDD that generates license keys for your products that your customers can use to validate and activate the product.

Using the Software Licensing API, we can determine which pricing plan each user is on and, therefore, restrict or make available certain features of the product.

Setting activation limits

Software Licensing is very commonly used to set activation limits on different product variations:

Software licensing activation setting

However, if we want to offer premium features on certain plans, we’re up against the same problem we saw with EDD where we would need to start working with additional files or separate versions of our product.

Using Software Licensing to determine license plan

But with Software Licensing, we can work round this. We can determine what license plan the user is on and make features available or not.

To do this, you must:

  • Set an activation limit for each plan that you create, as per the screenshot above
  • Incorporate the EDD_SL_Plugin_Updater class – see this article
  • Use the code below to modify the license activation code

Modify license activation code

In the sample plugin code supplied with the Software Licensing extension, you’ll find a function called edd_sample_activate_license. Right near the bottom of this function, there is the follow line:

update_option( 'edd_sample_license_status', $license_data->license );

Remember that you need to change the name of this option to something unique (so replace the edd_sample_ prefix with your own prefix).

Add a new line below this line:

update_option( 'your_prefix_license_level', $license_data->license_limit );

The function uses the Software Licensing API to retrieve data about the user’s license from the remote site where it was purchased (i.e. the site you’re selling your products from). The $license_data object reveals information about the license; the license_limit parameter is the activation limit.

Restricting features to premium plans

We can now use the option we’ve just saved to determine what features and functionality a user is permitted. For example, we can use this function to return the user’s license level:

function your_prefix_get_license_plan() {
  $license_limit = get_option( 'your_prefix_license_level' );
  if( false === $license_limit ) {
    // Option is empty
    return false;
  } else if( 1 == $license_limit ) {
    // This is our basic license, only one activation allowed
    return 'bronze';
  } else if( $license_limit > 1 && $licence_limit <= 5 ) {
    // Between two and five activations permitted
    return 'silver';
  } else {
    // More than 5 activations permitted
    return 'gold';
  }
}

A very simple way to use this would be to add a new file that contains all the functionality for your premium feature. Then, use the function above to determine whether to include that file:

function your_prefix_init() {
  $plan = your_prefix_get_license_plan();
  if( $plan == 'gold' ) {
    require_once dirname( __FILE__ ) . '/gold-features.php';
  }
}
add_action( 'init', 'your_prefix_init' );

Deactivating licenses

From time to time, your users will deactivate your plugin. When this happens, you need to delete the your_prefix_license_level option to ensure users do not have access to to premium features. In the edd_sample_deactivate_license, find the following code:

if( $license_data->license == 'deactivated' ) {
  delete_option( 'edd_sample_license_status' );
}

Update it to:

if( $license_data->license == 'deactivated' ) {
 delete_option( 'your_prefix_license_status' );
 delete_option( 'your_prefix_license_level' );
}

Final thoughts

Hopefully this article has given you some ideas for increasing the profitability of your themes and plugins. I think the trick here is to find the balance between which features belong in the basic version of your product and which features should be premium.

I also think that it’s important to consider the size of your plugin and whether certain functionality is more appropriate as a separate extension rather than a premium feature. You only need to look at Easy Digital Downloads and its range of extensions to see how this works for larger plugins.


Do you develop plugins?

You should try Wisdom, a plugin designed specifically for plugin developers that allows you to track your plugin's usage and provides invaluable data on how your plugin is being used. Find out more.

Leave a Reply

Your email address will not be published. Required fields are marked *