Tag Archives: update

Business With Content: Membership / Subscription Sites

This is the second article of the series “Business with content“. Read the first one here.

The typical subscription site. This is the first thing one thinks about when they hear about selling content. How does it work? You create content and protect it behind a pay wall. Users need to register to read / consume it. Typically they pay per month for access to the content you provide.

What Does It Take

The one most important thing to run a successful membership site is to have good content. This is true for all types of business with content: in fact it can’t be good. It must be great. You can no longer earn anything with mediocre content. People just won’t pay for it.

You may have read somewhere online that it’s a good idea to rehash content from the web, “curate” it and you can still earn. They tell you this because they want to sell you something. It’s shit and crap. Don’t even try to start a membership site without amazing content. Don’t rehash the net, don’t fill it with yet another site telling the same stuff that can be easily found for free. Your content must be unique and really good.

Private

Having amazing content is especially important in this business model because you are not charging just once, but you are hoping to retain these users and charge them monthly. This requires great content, and a lot of it.

We are going to talk more about this in another article of the series – the one about the need of expertise.

You need a sales funnel or other way of attracting users. We are going to talk about this in another article too.

You also need software to run your membership site which is discussed in the next section – the technical site.

The Technical Side

There are multiple ways to handle it – you can use a standalone script like aMember or E.M.M.A. or you can go with some of the popular CMS softwares like Joomla, Drupal or WordPress and handle it with a plugin. The second option is probably better because plugin development for open source CMS-es has become very popular and there are a lot of options, free and paid.

As a company focused mostly on WordPress it’s most natural for us to recommend you WordPress. It’s the most popular, easiest to use platform, and probably has the largest number of affordable membership site plugins available.

I am not going to do a comprehensive review of WordPress membership plugins here. There are sites who have done good job on this already.

I’d like only to suggest also our Konnichiwa! plugin which is free and will do the work for many of simple membership sites in very easy manner.

The Good

What’s the best thing about running a membership site for you as a business owner? The recurring revenue of course. It’s not like selling an info product like e-book. As long as your content is good and takes time to learn you can retain your customers for years.

There is also a strategy that includes gradually giving access to parts of the content. This is typically part of learning management systems but you can do it with standard membership site too. You can create delayed access to parts of the content to ensure that the customer won’t download it all for a month and then leave.

You may also want to add new content over time, build a community, have private discussion forum etc. things which can give more reasons to your members to remain subscribed. You can build tools that only members have access to.

The potential is really unlimited as long as you are creative and have some real expertise to share.

The Bad

All the above sounds great. Too good to be true? Actually not. All these advantages are real as long as you can produce great content.

So what could be the downside of running a subscription site? It’s not only one:

  • You need a lot of content. You may sell an e-book of fifty pages successfully if the information in it is good. Heck, you can even sell a 19 pages “blueprint” for $19 and sell thousands of it. And unless what you are selling is utter crap you aren’t going to get many refund requests. With membership sites things are different. You can’t expect people will subscribe and pay say $27 monthly for a subscription site that has 10 short articles. You need at least a hundred good ones. Or two hundreds. Or a thousand. And tools. And community. And videos. Maybe not all of this but some. It’s a lot of work and large upfront investment.
  • You need good reliable hosting. You can’t risk to upset your paying members with downtime. So in most cases shared hosts won’t work. You need good VPS or managed WP service. More cash upfront.
  • You need to keep your members. Getting someone to subscribe is probably not that hard but keeping them active is. Some people have no time to read regularly and will unsubscribe. Other have lots of time and will consume most the content shortly and unsubscribe since there is nothing left to read. You need to have lots of good stuff and add new stuff constantly to make things work.
  • People perceive membership sites as expensive. Paying $97 once for an e-book is acceptable. But $49 every month? That’s a lot of money for an year and many won’t want to commit to it.

Membership / subscription sites are good and viable business models. Of course they have their downsides but they are a good business model if you have good content to offer.

They are however not the only way to build business with content. In the next article we’ll cover the e-learning sites and interactive learning environments. Read it here.

Business With Content: The Current State of Affairs

Few years ago you could put up a blog and write. Write passionately about something you knew about. Write good useful information and write regularly. And you could easily make money by doing this. Just throw some Adsense or other ads on it and visitors would come, click on ads and you could earn a lot.

These days are gone. Today CPC earnings are way down and the battle for traffic is way harder. Having unique content is no longer enough to draw thousands of visitors. It’s not enough even to draw hundred visitors per month. Things have changed a lot in the recent years.

Thinking: More than None Will Be Required

Why Are We Writing This

We develop and sell several e-learning solutions and a drip marketing suite for more than 5 years. During these years I have personally interacted with probably thousands of customers working on all kind of content sites. Although there are some customers who earn from ads, most are having business models relying on paid access to premium content.

Watching how these businesses grow, listening to their problems and feature requests I have gained some insights about the many faces of this business.

So here I am to share some of what I learned by writing a series of articles that will review how you can make money with premium content in 2016 and ahead. And not just make some quick money but eventually build a stable business based on it.

This series will of course not reveal anyone’s specific business details, unless I have explicitly asked and received permission to publish them. Our customers privacy is top priority.

Current Successful Models of Business With Content

Making money with free content and advertising is out of scope of this series. There is a lot of information online on this topic. My personal experience and impressions from watching others is that this rarely works any more and you are far better to monetize your content directly (or indirectly by using it as sales funnel) rather than by placing third party ads.

This series will focus only on earning directly from your content, by charging for it in one or another way.

This currently boils down to several business models:

I do not aim to cover all possible business models. Maybe there are more. More interesting and original ones. If you know one and want to share it, let me know. I’ll talk only about ones I have explored in one or another way. I will talk only about stuff that is still working and not going anywhere any time soon.

There are several other important topics we’ll review here:

Let’s go!

The second article of the series is about membership / subscription sites. Click here to read it.

How To Use WordPress Filters and Actions To Extend Plugins Functionality

There are two main ways to extend or customize existing WordPress plugin without editing the code directly – filters and actions (as a whole called “hooks”). The WordPress Codex does a good work of documenting the functions for actions and filters. It does not do such a good job in giving easy to understand example how to actually use this to do something useful. We are going to fix the problem with this tutorial.

Before going further you must have one thing in mind – the plugin that you are going to customize must be customization-friendly and offer at least some hooks. Example of such plugin is our Namaste! LMS with its Developer’s API. If you are writing a plugin it’s good to think about adding do_action and apply_filters calls on the most important places.

In this tutorial I’m going to use a couple of examples from Namaste! LMS and our other developer-friendly plugin WatuPRO to illustrate the usage of only the 4 most important action / filter functions:

  • do_action
  • add_action
  • apply_filters
  • add_filter

Let’s go!

Filters

The below chart will give you basic idea how filters work. Then we’ll provide some examples.

filters

Filters are used mostly when you want some content to be modified before displayed or sent to user. You can apply filters on text but not only – there are a lot more creative ways to use filters. Here are a couple examples from Namaste! LMS:

1. All the places where courses are selected to be shown to the user in Namaste! LMS have this hook:
$courses = apply_filters('namaste-reorder-courses', $courses);

What does it do? It allows other plugins to apply changes directly to the $courses array. And Namaste! PRO uses exactly this filter to apply the custom order of courses to the array by catching the filter:

add_filter( 'namaste-reorder-courses', array('NamastePROCourses', 'reorder_filter'));

There are several things that you must understand here:

a) The “source” plugin (the one that you will be customizing) must provide the proper filter by calling apply_filters($tag, $value) on the variable that will be modified. The first argument is the tag of the filter. It’s just unique name that will then be used by other plugins in the add_filter($tag, $function) call. When the name matches, the function defined in add_filter will be executed over the content of $value from apply_filters in the other plugin. Thus you can modify the $value (in our cases $value is the variable $courses).

b) The extending plugin must catch the filter with add_filter() call as explained above. But in order anything to happen the extending plugin should also define the function or method mentioned in the add_filter call (the second argument called $function). Look at the code again:

add_filter( 'namaste-reorder-courses', array('NamastePROCourses', 'reorder_filter'));

This means your customization plugin should have a class called NamastePROCourses with method called reorder_filter.

c) The apply_filters() call returns the modified $value which should also be returned by the function defined by add_filter(). It’s not important how exactly the method reorder_filter works but it must return the modified variable:

static function reorder_filter($courses) {
   // do something with $courses inside the method
   // not shown here

   return $courses; // return the modified variable
}

Only this way the $courses variable will be modified in the original plugin.

d) Multiple plugins can apply changes to the content using the same filter tag. So you can write your plugin that will for example add more properties to the $courses array, slice it, erase it, change it to something completely different and so on.

e) Do not rely on order of filters execution. When writing a custom plugin you should never assume that add_filter() calls from other plugins will be executed before or after your call.

f) If no filters are defined with add_filter for a given tag, then the apply_filters call will return the original variable.

2. As you saw from the above example, you can filter not just text but any kind of variable – in our case it was an array. The below example will demonstrate a smart trick using text. We need to allow external plugin to apply user-based restrictions to the SQL query that selects courses. instead of working with the courses array, we just use SQL variable string that will be applied to the query:

$filter_sql = '';
$filter_sql = apply_filters('namaste-course-select-sql', $filter_sql, $user_ID);

In the above example the variable $filter_sql (which is after that used inside the SQL query string) is first initialized as empty string. This way if no plugin defines add_filter on the namaste-course-select-sql tag, the string will remain empty and the query will remain as is. However if another plugin catches this filter and adds some SQL to it, the query which contains the $filter_sql variable will also be changed!

The above example also passes additional argument so the add_filter call needs two extra arguments:

add_filter( 'namaste-course-select-sql', array('NamastePROClass', 'course_select_sql'), 10, 2);

Check the add_filter documentation to understand why they are required.

Actions

Actions don’t return value and don’t let you modify variables but are probably even more powerful and easier to understand than filters. Actions let you notify other plugins that something in your plugin has happened. Then the other plugins can act based on it. You can also pass arguments to actions. The “source” plugin must call do_action($tag) and the receiving (customization) plugins must call add_action($tag, $function) with the same $tag to catch the action and call the $function. Here are a couple of examples:

1. Probably the most used action call in WatuPRO is the “waturpo_completed_exam” action called when a quiz is completed:

do_action('watupro_completed_exam', $taking_id);

This call sends the ID of the just taken quiz record so other plugins can use it. And they do. For example the Play Plugin catches this action to update user’s level, badges, points balance etc:

add_action('watupro_completed_exam', array($_user, 'update_meta'));

The variable $_user in this case is instance of the WatuPROPlayUser user object which has method update_meta. The method update_meta takes one argument – the taking ID – and does things with it:

function update_meta($taking_id){ /* do something here */}

Of course, just like with filters, the call to add_action must use the the same tag as the call to do_action to catch the action – in this case the tag is watupro_completed_exam.

2. Here’s a bit different example, this time from Namaste! LMS. At the end of creating the menu of the plugin we add the following simple do_action call, no arguments needed:

do_action('namaste_lms_admin_menu');

This lets other plugins hook their links under the Namaste! LMS menu so their extra options nicely align in it instead of creating more top-level menu links. This action is caught by Namaste! Reports, Namaste! Connect, Namaste! PRO, the InstaMojo integration plugin and many more. If you write your own plugin for Namaste! LMS I recommend using the same action (in case you need to add pages to the menu). Example call:

add_action('namaste_lms_admin_menu', array('NamastePRO', 'menu'));

Then the menu() function in NamastePRO class simply adds its own add_submenu_page() calls to add more links (note that the add_submenu_page() parent slug must also be properly defined).

Actions and filters give you huge options for customization and the best of it: without touching the code of the original plugin. Beautiful! Of course this is only possible if the original plugin defines do_action and add_filter calls in the proper places. If it doesn’t you can try to request the original developer to add some hoks. Most will not refuse because adding a hook here and there is not hard and makes the plugins easier to extend.

If there’s anything unclear in the above explanations, please ask in the comments.