Intro to WordPress Staging Sites

You have a successful WordPress site. You’re happy because you got your site up and running quickly on a tight budget. Now, your website is the main source of your customers and sales. As your business grows, so does your need for more functionality and plugins.

A few times a month, you make content updates and do theme and plugin upgrades on your site all by yourself. You’ve never had any problems—you think running a website is a piece of cake.

Then, after you run a bulk update of a dozen or so plugins, you start getting emails from customers, your WordPress site, and even Google. The emails say that you have a serious issue with your site. You bring up your browser and try to pull up your site. Unfortunately, all you get is a blank white screen.

This nightmare scenario happens all too often. The good news is, it can easily be avoided if you use what’s called a staging site or staging environment.

A staging site is a separate copy of your live website. The keywords being: separate and copy.

Because a staging site is separate from your live site, you can do things like upgrading to a new version of WordPress, upgrading your theme, or updating your installed plugins without affecting your live site. And, since a staging site is a copy of your live site, you can make changes and test the changes on a staging site as if it was your live site. After you verify that the changes you made on staging look good and work the way they should, then you can make those same changes on the live site.

Testing updates on a staging site before applying the updates on your live site helps ensure:

  • Your site is still fully functional and continues working as it should after updates.
  • There’s no disruption of your online presence that you rely on to promote your brand awareness and preserve your credibility.
  • There’s no loss of revenue and customers because of unplanned downtime.
  • There are no search engine penalties from non-working pages or missing content (e.g., 404 or 500 errors).
  • There’s no loss of precious site content or customer data—namely for membership, eLearning and eCommerce sites.

Staging sites don’t have to be just for testing plugin, theme and WordPress upgrades. They can be an entire development environment for a brand new site, a place for troubleshooting and fixing an issue, or even testing performance tweaks. Do you want to try out a new plugin or the latest beta version of WordPress? No problem. These are the kind of things a staging site lives for. And, if you care about your business and your customers, you shouldn’t be experimenting or making untested updates in your live site.

WordPress Staging Sites

Does the phrase, “a copy of your live site” set off your SEO warning bells? Rest assured that staging sites are almost always password protected and/or blocked from indexing. That means they won’t affect SEO standings of your live site.

Do you need a final thumbs-up from your client before releasing new website features? Staging sites are invaluable for getting the site owner’s feedback on enhancements or fixes before they are made public.

Staging environments have been an integral part of the software development lifecycle (SDLC) for decades. Their main purpose in the SDLC is to make sure you got things right before going live. However, just because you have a staging site doesn’t mean you’re completely in the clear. They can be misused like any other tools in your toolkit. Not to worry—whether you’re new to staging sites or a seasoned veteran, we’ve got your back.

In this article, we’ll guide you through our best practices for using a staging site. We’ll begin by describing how you would incorporate it into your workflow. Then, we’ll dive into our list of dos and don’ts. Lastly, we’ll briefly explore some of the WordPress hosting providers who support staging sites.

Please note that we’ll use the words staging site, staging environment, and staging to all mean the same thing. Similarly, we’ll refer to the live site as production from time to time.

Incorporating a staging environment into your workflow

Life before staging

Let’s review a typical WordPress site’s update workflow without using a staging site. It would look like this:

  1. Log in to your site’s admin Dashboard.
  2. Click on Updates on the left sidebar menu.
  3. Under the Plugins section, click on Select All.
  4. Click the Update Plugins button.
  5. Cross your fingers.

Then rinse and repeat for installed themes and even WordPress.

When all plugins are updated, maybe you bring up your home page to do a visual inspection. If there are certain pages or forms that are critical to your business, you might even go the extra step to check if they’re still working.

Let’s say your website is an eCommerce site as an example. You try to purchase one of your products as a test. You find out that your shopping cart isn’t working. No products are being added, and you can’t figure out why. You’ve only got two options at this point, and both of them aren’t pretty.

Option 1: troubleshoot and fix the issue knowing your site is broken, and the clock is ticking

Thankfully, figuring out which plugin broke your shopping cart is pretty straight forward. One way to do this is to deactivate all your plugins. Then, turn them on one-by-one. Each time you turn back on a plugin, test your shopping cart. Once the shopping cart breaks again, the last plugin you reactivated before the issue reappeared is your culprit.

But, it’s not over. We know which plugin is breaking our site, but we don’t have a fix yet. Your site is still broken. And, the clock is still ticking. Now what? You’ll need to contact the plugin author, report your issue, and request an emergency fix or a temporary workaround. How long it takes for the vendor to verify your issue and deliver you a patch is anybody’s guess. All the while, no one can buy anything from your site.

Option 2: restore from a backup and accept a loss in data

Assuming your hosting plan comes with a daily backup, you can restore your site from the last backup yourself. Otherwise, you frantically call customer support for help.

You finally get your site restored, but there’s some data loss. Depending on how old the backup is that you restored, you could be hit with one to hundreds of lost product orders, customer data and subscriptions. Even one lost large purchase could deliver a critical blow to your business.

Life with staging

Here’s how things play out if you use a staging site for updating your plugins.

  1. Log into your hosting provider.
  2. Click on the one-click staging button to clone a copy of your live site to a staging environment.
  3. Log in to your staging site’s admin Dashboard.
  4. Click on Updates on the left sidebar menu.
  5. Under the Plugins section, click on Select All.
  6. Click the Update Plugins button.

Now, we can run our shopping cart test again. But, this time we’re testing to see how things are working on the staging site. Not the live site. Insert a sigh of relief here.

This means you can verify that your site is all good at your own pace. If there’s an issue, your live site isn’t affected. If there are no issues, then you can safely update all the plugins on your live site.

Best practices

The dos

1. Take a full backup

A full backup means that all the files and database tables that make up your site are copied to a safe location. This is opposed to a partial backup where you can select to back up only parts of your site. A full backup includes WordPress core files, theme files, media files, and the database (DB).

We recommend that you always make a full backup of your live site before creating the staging site copy. You can quickly restore everything back to normal from the full backup if needed.

It’s important to note that there is a difference is between a daily backup and an instant (unscheduled) backup—sometimes called a snapshot. A snapshot taken just before updating the live site is good to practise for minimising data loss if something goes wrong.

For instance, let’s say you didn’t take a snapshot, and your latest full backup was done 23 hours ago. Now, you want to abort the process of updating your live site for some reason. So, you restore from yesterday’s backup (it’s the most recent). When you check your site, it’s back up and running. You’re feeling good until … wham, you notice that the 200 purchases and customer accounts that were created over the past 23 hours are gone.

Always take a snapshot before creating a staging environment and before updating your live site.

More and more hosting providers are making the staging process easier. Kinsta’s staging to live feature is a one-click action that pushes your staging to site to the live site. Before the push to live, the live site is automatically backed up as part of the process. Similarly, the WP Staging plugin recently added an automatic snapshot feature to their push staging to live function.

2. Disable emails

While working in staging, you should disable all emails. You definitely don’t want to inadvertently flood your customer’s inboxes if the work you’re doing on staging is kicking out email notifications all over the place or your site sends scheduled emails. The Disable Emails module in our Uncanny LearnDash Toolkit is designed to remedy this.

You can prevent your staging site from sending any emails by using the Disable Emails module. To test if your emails notifications are working without sending out actual emails, use the Disable Emails module in conjunction with the Email Log plugin. Disable Emails will block outgoing emails, but Email Log will record what notifications would go out as if they were sent.

3. Clear the cache

It happens to all of us. After we make a simple change, we reload the page to see it, and it’s not there. We hit reload a couple more times—still nothing. We go back to the change. The change looks good. We hit the save button just to be extra sure. We click reload again. Nothing. We’re just about the scream before we realise we should clear our caches.

Assuming your change doesn’t have an error, you save your work, and you’re looking at the right page, this problem is almost always due to caching. To save time and your sanity, we recommend disabling your caches while you are making changes in staging. Only enable them when you are doing performance testing or to make sure there are no plugin conflicts if you use a caching plugin. Make sure you clear your caches on the live site too when you push changes.

4. Version your child theme

Version your child theme by updating the version field in the header section comments of child theme’s style.css file. This way, anyone who uses your child theme can make sure they’re pulling down the latest static files rather than what’s cached in the browser.

WordPress Twenty Twenty child theme header

The don’ts

1. Never push the staging database to production

Your production database should be the single source of truth. Treat it like your personal gold mine. Therefore, never contaminate it. This means, never push your staging database to your live site, especially if you have an elearning, ecommerce or membership site (in general any site where users have accounts and/or generate new data). Overwriting your production data from staging is never a good idea. Some automated staging tools do not permit pushing the staging DB to production. Instead of pushing from staging to a live site after validating changes, reproduce the steps you took on staging. It’s often helpful to keep a log as you test on staging, noting the updates you ran and changes you had to make to ensure everything worked properly after the updates. (If code updates were required to fix things and you use git repositories, it should be easy to push the fixes required on a staging site to the live site automatically, and if changes affecting the database are needed then keep a lot of everything that was changed.)

2. Don’t take partial backups

As we mentioned above, full backups are the only way to fly. You might see options in your dashboard for backing up only the database, media, theme, or plugins. When it comes to working with staging environments, don’t take partial backups. We need to make sure we can always restore our complete site—not just pieces of it.

3. Don’t keep your backup on the server

There are two big reasons you shouldn’t keep your full site backup on your website. First, if your server crashes and all files are lost, your most recent full backup is also gone. Second, your backup file(s) takes up disk space. Depending on the size of your site, your backup files can be humungous. Your available disk space could shrink to nothing if you have an increasing stockpile of backups on your site. Your site will screech to grinding halt when you’re out of disk space. Managed WordPress hosts typically offload backups to Amazon or another cloud provider to ensure they’re kept safe.

4. Don’t give public access to your staging site

When staging sites are created on hosting plans that support them, they should automatically be private. However, you should always check especially if you manually created your staging site. It’s a good idea to password protect your site, and at a minimum make sure that search engine indexing is blocked. Staging sites should be controlled environments, meaning, you know what’s happening to the site at all times. Otherwise, you can be wasting precious time chasing your tail trying to figure out why the changes you made yesterday aren’t working today.

5. Never automatically update WordPress, themes, and plugins

If your site is mission-critical, meaning that you’ll lose revenue and customers if your site goes down, you should never automatically update your WordPress version, your active theme, and any active plugins. You’ll need to check with your hosting provider’s policy to see what their default update settings are. If they default to any kind of automatic updates, then you’ll need to know if you can disable them. This is especially important for ecommerce, elearning and membership sites where the signed in experience is different and automated checks wouldn’t notice issues resulting from updates.

Automatic updates for themes and plugins are usually disabled by default. If they aren’t, then you can write filters in a must-use plugin or use a plugin like Easy Updates to turn this off.

To be clear, disabling automatic updates doesn’t mean you’re off the hook for keeping your site up-to-date. Never automatically updating means, you should take the time to test your site with updates before going live.

Setting up staging on various host providers

If you’re looking for a hosting company, we recommend that you choose a provider that has built-in support for staging sites. Below, we’ve picked 3 hosting providers that support staging sites in their plans.

Let’s go through how you would set up a staging site for each provider.

WP Engine

1. Log into your User Portal.

2. Navigate to Sites.

3. Click on the site name that you want a staging site for.

 

4. Click on Add Staging.

5. Click on the Copy from existing tab.

6. Enter the name of your staging site in the Name the environment field.

E.g., “mysite-staging”. Using this example, your staging site’s domain will be “mysite-staging.wpengine.com”.

7. Select your production environment in the Select an environment to copy from drop-down.

8. Select your most recent backup from the Select a backup to use drop-down.

9. Click on the Create environment button.

An email notification is sent when the staging site is ready.

Kinsta

1. Log into your dashboard.

2. Navigate to Sites.

3. Click on the site that you want a staging site for.

4. Select Staging in the drop-down menu located at the top right of the page.

5. Click the Create a staging environment button.

Kinsta generates a staging site name and URL for you. The URL follows this format.

https://staging-sitename.kinsta.cloud

Where sitename is the name of your live site.

Pressidium

1. Log into your dashboard.

2. Navigate to Websites.

3. Click on the site name that you want a staging site for.

4. Click on the Staging tab at the top.

5. Click the Create Staging button.

When the staging site is ready, you’ll see a notification in your dashboard. Your staging site’s link will look like:

https://mysite.dev.onpressidium.com

Where mysite is the name of your live site.

If your current hosting company doesn’t have staging support, you should request that they add it to their offerings. If they don’t plan on embracing staging sites any time soon, it’s time to shop around for a provider like the ones we’ve featured above.

Conclusion

We recommend that you always use a staging site even for updates that seem completely harmless. Conversely, we don’t ever recommend using your live site to test changes or try out new things.

If you’re still doubting that staging sites are vital for your business, there are a couple of rare cases where we think you could forgo a staging site:

  • Your live site is private and has no visitors except for you.
  • Your live site is public, but no one cares if it’s up or down.

Cost used to be a factor for skipping the use of a staging site. Luckily, more and more hosting providers offer free one-click environments. With increasing support for staging sites, there’s no reason to find out the hard way that running your operations without a staging site is far more expensive.

Let’s face it, having a website (whether it’s on WordPress or not) requires continuous care and feeding. If you want a healthy and safe website that’s always running the latest/greatest features, investing in a staging site is a no brainer.

How to ask for WordPress plugin support (the right way)

Uncanny Owl recently passed a big milestone for our Help Desk: Ticket #10,000. We started using a Help Desk system in 2016, before we started selling plugins, and it’s perhaps our most valuable tool. It’s the first thing we check in the morning, the last thing we check at night, and using it ensures that the thousands of customers that depend on us stay happy.

After a few years of providing support to over 3,500 different people, we know all too well what makes a WordPress support ticket easy to resolve and what types of inquiries are going to drag on for some time. Everyone wants a quick fix to their question or problem, and while we as plugin vendors do our best, there’s a lot you can do as a plugin customer to make the process more efficient. In this article, we’ll outline the best ways for making sure that your problem is resolved quickly and accurately.

Help Desk Stats

Be specific

Last Thursday I took a call from a plugin customer who wasn’t very happy with our product. Despite us having a 10 minute call about it, I still don’t know why he was unhappy. The best answer he could give me was that “nothing worked”. I tried to dig deeper, to find out what functionality he was using and even why he bought the plugin, but he could only tell me he bought it to make his site “better”. I know he was frustrated, but he couldn’t articulate specifically what he was expecting that the plugin wasn’t doing.

Receiving a ticket that tells us that a “plugin isn’t working” makes it difficult for us to help and means that we have to follow up asking for more details, which in turn delays resolution. Tell us what you’re expecting to happen that isn’t happening; let us know what you are experiencing now. If you see an error message, include the error message.

Be kind and stay calm

We know that you’re reaching out to us because you’re experiencing a problem that’s causing anxiety and asking us may be your last resort. We do our best to empathize with the situation and we approach tickets as if they were about our own site. When we receive a ticket that starts off with an introduction like, “Hey guys, love your plugins, but I’m running into an issue right now with XYZ and I’m hoping you can point me in the right direction”, it’s going to set the right tone for the conversation and put everyone at ease. We’re also going to stay focused on resolving the issue.

While it is (fortunately) very uncommon, taking the opposite approach slows things down and adds tension to the relationship. Early last week, a customer reached out to point out a small error in a line of code that we shipped out (that had negligible impact on functionality). It could have been a simple interaction: “Hi Uncanny Owl team, I noticed a small issue in this file on line 123, it should be ABC instead of XYZ, can you confirm the fix and include it in the next release?” That would have been fantastic, we would have investigated and confirmed it immediately, and the ticket would have been closed. Instead, the user led with, “Do you guys even test anything before you push updates?”—and then we’re automatically on the defensive. We then have to be more careful about planning our reply and approach to a resolution.

Provide a test case

Last week we had a ticket that effectively said, “Some of our users report that they can’t complete a course, please fix it ASAP.” I didn’t know what plugin they were using of ours, what was supposed to trigger course completion, etc. It took about 4 emails back and forth to put together enough detail to understand what users were doing and what was expected but didn’t happen.

Here’s an example of a great test case related to a real (and recent) issue with one of our plugins:

Hi, I’m using the Uncanny LearnDash Toolkit Pro plugin with the Autocomplete Lessons & Topics module turned on. I have autocompletion enabled globally, but for the first topic of a course I have it disabled at the topic level. When I visit the topic as a user, I’m able to click forward to the next topic and the first is marked as completed. It shouldn’t be marked complete because of the topic-level override. Any idea what I’m doing wrong? Here are some screenshots so you can validate my settings.

That is a fantastically helpful ticket to us because we know exactly what the customer is using, we know how things are configured, we know the steps they’re taking and we know the expected vs. actual result. This kind of example makes it really easy for us to validate the issue in our test environment to assess if there is a problem in our plugin or if it’s a unique behaviour to their site. Be very descriptive, outline the steps someone could take to reproduce the issue, and include additional details like screenshots whenever it’s appropriate.

WordPress plugin support

Outline what you’ve done so far

Once again, the more we know the better. Using the ticket above as an example, it would absolutely help us to know if the user tested with different module settings or with the plugin disabled entirely to see if the results were different.

Let’s take an example with one of our plugins.  Perhaps the site admin wants LearnDash Group Leaders to see the admin bar, but for some reason it’s not showing up.  In our Hide Admin Bar Toolkit Module, they have the Group Leaders unchecked (so those users should see it).  This suggests another plugin is conflicting with the settings in the Toolkit.  Before reaching out to us, maybe the customer already disabled all plugins (except our Toolkit) and changed the theme temporarily to confirm the issue still happens. Knowing that would save everyone time, because that’s the very first thing we would suggest if we suspected a conflict.

That leads us to a related and very important recommendation.

Get a Staging site ready

With elearning sites in particular, testing updates and issues on a site that’s independent of your live site is critically important. Having a Staging site available for that purpose is a must, and if it can be used for resolving issues as well, all the better.

Sometimes we simply can’t trace a plugin issue through descriptions and screenshots alone. We do need access to see what’s going on and to test things. I can absolutely confirm that we do not want access to your site unless there’s no alternative, and if we need it, we don’t want to test things on your live site. If an issue seems like it’s going to need troubleshooting directly in your environment, it’s going to be easier and safer for everyone if that testing can be done on a clone of the live site rather than the real site. If you suspect the plugin vendor will need to see what’s going on in the environment or the conversation is heading in that direction, get a Staging site up and running.

Do some initial troubleshooting

If you’re new to WordPress this guidance is going to be hard to action, but as you get more experienced you’ll start to understand what’s likely to be causing certain errors and where to look to trace them.

If you see a white screen, a page in /wp-admin/ only partially loads, or you actually see a “500” error message, there’s likely a fatal PHP error on the site. Typically there’s going to be an associated message in the web server error log, so you’ll want to check there first for a “Fatal Error” and pass that on to the plugin developer. The WordPress debug tool can also provide really important clues about system-level errors.

If something on a site just looks wrong or unlike screenshots on a plugin developer’s website, or interactive elements on your site aren’t working properly, it’s likely a javascript or CSS conflict. Check the browser console (View > Developer > JavaScript Console in Chrome) for more information, and if you find any errors, they will be immensely helpful to the plugin developer.

Include one issue per ticket only

This one is really important when you want a quick resolution for your ticket. Our team has multiple developers, each of whom has different areas of expertise. We have 3 customer-facing staff handling support tickets and 4 developers behind the scenes providing assistance. Tickets that include several issues slow things down by an order of magnitude, because now we have to split tickets up behind the scenes, assign them to different developers and staff, then wait for an update on all of them before we can reply to the customer. After all, we don’t want to send pieces of updates and end up in situations where only part of the ticket ends up getting answered.

A few weeks ago we had a customer submit a 3-page PDF file outlining 5 completely unrelated issues they were having. None of the 5 had a simple answer, all required testing and validation, and we had to address all of them before we could properly reply (beyond sending an initial confirmation warning the user that it would take longer to investigate all 5 questions). Turnaround time would have been improved for the customer, and things would have been more efficient for us, to have received 5 separate tickets instead.

We want to help

When something goes wrong with a WordPress plugin, it’s absolutely a scary moment and you just want it fixed as quickly as possible. We as plugin developers want the same. By helping us to understand the problem, making it easy for us to test it ourselves and by giving us all relevant information, your tickets will be turned around faster and your issues resolved more quickly.

Give the tips above a try the next time you need to send in a support ticket and let us know in the comments if they helped!

How We Made LearnDash 75 Times Faster

Important: This article examines how we modified certain parts of LearnDash to improve performance on high volume/enterprise sites. LearnDash itself is not slow, but some parts of it are designed for convenience rather than performance. For the vast majority of LearnDash sites, the optimizations discussed below are unnecessary and could be dangerous. This article is intended for very large sites where scalability and performance are critical. 

LearnDash Performance TuningWe see a lot of projects that really push LearnDash to its limits, and for a sub-$200 WordPress plugin, those limits are surprisingly high. LearnDash is generally an efficient plugin that serves the vast majority of its customers very well, but every so often, an organization wants to see how well it can really perform at scale.

The typical LearnDash site we see might expect up to 15 simultaneous learners (even on sites with upwards of 1,000 users) and perhaps 200 LearnDash posts. We  support several, however, that have hundreds of simultaneous learners and thousands of LearnDash posts (courses, lessons, topics and quizzes). At that level, everything gets harder and keeping everything running smoothly requires tuning performance wherever we can.

What we observed on extremely large sites, especially after total courses crossed the 100 level, total quizzes exceeded 1,000 and we started going over the 100 simultaneous user mark, was that performance significantly deteriorated in 3 main areas: user profile pages in /wp-admin/, quiz listing pages, and quiz submissions. In some cases users and admins were even seeing 503 errors, which is catastrophic for any live LearnDash site, but especially ones with hundreds of people online at the same time.

In user profiles we found that database operations could often exceed 150 seconds of processing times and require 10s of thousands of SQL queries to render (perhaps 200 queries is typical on most pages). What we found was that the “Course Progress Details” section of the profile page was looping through all courses to retrieve records for the user and the courses for every course the user was enrolled in. It was pulling everything down on page load too, so even if an admin were just going in to change a password or something else unrelated to LearnDash, the site would be affected by severe load.

Loading all of this data does make things a lot more convenient for admins, and in most cases this section wouldn’t be an issue. But when loading tens of thousands of records on a site with lots of courses, it’s a problem. Fortunately, our developers were able to override this section completely with an alternative solution that combines queries and reduces loops when the admin drills down into that specific course. The approach means we only load data when it’s needed and only as much as is needed. We also removed the edit links to LearnDash posts from the profile page, which are generally rarely used, and we added some transients to speed things up further.

The net effect of these changes?

We took profile page load time for admins from 150 seconds to 2 seconds. 

The difference was night and day. It made profile pages usable again.

The list of quizzes inside LearnDash was another interesting performance challenge. With well over 1,000 quizzes (and thousands of lessons and topics) on a site, just listing the quizzes was a 120 second exercise that adversely affected learners on the site at the same time. Why so slow? Well, LearnDash adds filters to quizzes to make it easy to choose a course (or something else) and only see quizzes under it. But to populate that list of filters, it needs to look up all the associations between quizzes, courses, lessons and topics—which takes a long time on a big site.

This was a case where we really gave up convenience for performance. We didn’t care about only showing objects with quizzes in the filters. So instead we just loaded all courses, then on course selection in a filter we showed all lessons and topics. If the administrator filtered and there were quizzes, great. And if not, we just showed a message that there were no quizzes. That change took loading the quiz listing from 120 seconds to 2 seconds. It was well worth the slight inconvenience.

LearnDash Quiz Performance

Next we looked at quiz submission performance. On sites with a lot of content, saving quiz answers that include essay questions can be extremely slow—in the case of a site with 120,000 rows in the wp_posts table, it was taking 35 seconds to save quizzes with essay questions. Obviously that was trying learner patience and slowing down the site. To address this one we took a shortcut, and instead of looking for a matching post title or name to avoid duplicates when saving an essay answer, we skipped the check and just forced a unique post name.

That new approach took quiz saving time from 35 seconds to 3 seconds.

As you can see from our results, it is possible to significantly increase LearnDash performance on big sites. What’s especially nice is that LearnDash allows us to make 2 out of the 3 overrides above without changes to LearnDash code (and we’re hoping the third can be handled outside of LearnDash in a future LearnDash release if additional filters are added). This means it’s easy to bundle our performance improvements into a portable plugin and the optimizations will survive updates.

Another factor that did help us really push LearnDash performance on these sites was assistance from Pressidium, who are hosting the sites. They went out of their way to help us look at opportunities for performance enhancements and they applied some database changes to their environment to improve performance further.

Are you trying to improve LearnDash performance on a big site? We can help.

Where to Find LearnDash Training, Tutorials and Documentation

Building a robust and polished LearnDash site can be quite difficult. We’ve been doing it for over 4 years now and we’re still discovering new and better ways to build sites. We definitely have an edge with a team of skilled developers and LearnDash experts at our disposal, but we’re all too aware of some of the challenges faced by for new WordPress users and even experienced developers.

This article came about because we still get countless inquiries from people who recognize that LearnDash is a powerful tool that can probably help them—but that’s really as much as they know. They don’t know how to get started and don’t know where to turn to find more information, guidance, and support. We unfortunately find, time and again, that people simply aren’t aware of some of the great LearnDash resources (including tutorials, screencasts and documentation) that are available. We’re hoping that this article saves those users some confusion and frustration.

Start with the Source

The LearnDash Support Site is an invaluable resource that not all LearnDash users seem to know about. If you haven’t bought a license yet, you might not even know it exists! It’s easily as valuable as the plugin itself though. There are countless screencasts, Knowledge Base articles, FAQs, and more. Perhaps the most valuable tools are the forums (which are very active and full of useful information to solve common LearnDash problems and share best practices) and access to the LearnDash support team, who we routinely see go out of their way to help LearnDash customers.

Go to the Experts

Outside of the LearnDash support site there are still lots of great resources. On YouTube there are hundreds of videos from many different authors (including ours; our popular How to Make a LearnDash Site video has helped thousands of LearnDash users). Agencies and developers that work with LearnDash often have great tutorials and articles covering best practices (the LearnDash blog, this blog, WisdmLabs, and others are examples), though it can sometimes be difficult to find the right articles among so much information. Google can be your friend to narrow things down to specific subjects.

The LearnDash Facebook group is very active and has hundreds of members ready to jump in and provide advice on everything from the basics to complex code solutions. You’ll even find some of the Uncanny Owl team on there!

There is also our introductory LearnDash course for our Uncanny LP hosted LearnDash platform. Although it is targeted at a modified WordPress platform, it does still cover all of the WordPress and LearnDash basics someone would need to get started—it just demonstrates everything with a streamlined interface that could be confusing if you’re not using LP. It is free and anyone is welcome to use it, or you can skip the course and jump right into the hours of useful LearnDash useful LearnDash screencasts.

LearnDash can seem overwhelming at first, but there really are many helpful resources available and a large community of users eager to help.

If you have other sources of useful LearnDash training and documentation, add them to the comments below!

How to Choose a LearnDash Developer

As LearnDash developers with some visibility in the WordPress LMS community, we get a lot of requests to fix bad projects. It’s so easy for things to go wrong, and selecting the wrong partner can often mean the project is doomed before you even start. In this post we’ll explore the most important things to consider when choosing a developer for any WordPress elearning project. Our expertise is in LearnDash, but all of this applies equally to LifterLMS, Sensei, and any other WordPress LMS plugin that you’re building your platform around.

This post isn’t about selling our services; we’re already at capacity and have unfortunately had to stop accepting new clients several times recently. What we want to do with this blog post is raise awareness so that when you are looking for a partner to help build your LearnDash site you better understand how to choose an organization that is competent and will be able to deliver a robust platform that meets your needs.

If you’re starting out on your first LearnDash development project, here are some things to consider as you look for a partner:

Start with a conversation. We really find that emails don’t work well enough to ensure all parties are on the same page and to ask questions easily. It’s great if you can come to that conversation with clear goals and questions. The vendor should have questions too. Relationships are absolutely critical to successful projects and this is where they start. Take notes and be thorough. If you’re comparing vendors, make sure you have a consistent way to assess them and document everything immediately after the conversation. Also be prepared for several conversations; it’s rare that initial discovery and planning can be completed in a single session, unless it’s a very small project.

learndash discussion

Ask if you can see some of the company’s other projects. Do keep in mind that for LearnDash projects most of the development work tends to be behind registration or a paywall, so the access developers can provide is limited. Again, this is where a call (or preferably web conference) can be very helpful, as on a call the developers can actually sign into sites and show how things are set up or created. Experienced LearnDash experts should have easy access to a variety of representative samples. Ask for some walkthroughs and get more information about what specifically the developers did. Give consideration to what works and what doesn’t, and how similar previous projects might be to your own. Experience is extremely important when setting up intuitive, effective elearning platforms with WordPress.

learndash testimonialsCheck out community feedback. This can be really hard to find in the LearnDash space, but it’s still important to make an effort and solicit experiences about working with the vendor. Maybe there’s feedback on social media, plugin reviews for things they may have developed, the LearnDash support forums, even reaching out to previous customers. Also look for negative feedback, which can often be more telling than positive comments.

Don’t just look locally. There are very few WordPress agencies and developers that have a significant amount of LearnDash experience. We’ve seen a lot of projects where businesses chose someone they know who’s done other work for them (LearnDash is just one plugin, right?) but couldn’t transition to considerations like the signed-in experience, student workflow, making things work together, etc. To get the best partner, expand your search range, potentially even to other countries. We’re in Toronto but we have many clients in Australia; it’s not as hard as you might think to make projects like that work.

Get to know who you’ll be working with. Without question, the #1 reason we’ve taken over several projects from experienced LearnDash developers hasn’t been bad code quality or poor implementation—it’s been a communication breakdown. Communication issues are painfully common with these projects and site owners come to us because they have a site they don’t know how to use, isn’t what they expected or they’re tired of saying the same thing over and over.  Whoever is setting up your site is someone you’ll be working with for over at least several weeks, perhaps even several years. There has to be a rapport. There must be trust. And it has to be really easy to communicate and make sure everyone is always working towards the same goals and scope. You don’t want to be talking to 5 different people and for discussions to only happen by email with week-long gaps between them.

Try to assess technical competence and workflow. While communication issues abound, there are still a lot of developers out there that simply bite off more than they can handle with LearnDash and don’t really know what they’re doing. They might be great people that really want to help, but that doesn’t mean they should be building LearnDash sites. Just last month we took on a site where the developers had made changes to LearnDash core and even WordPress core—and that should never, ever happen.  The client, of course, wondered if it was normal for everything to break and have to be fixed on updates (it’s not). So ask LearnDash partners how they work and look out for red flags. How do they implement changes? How do they test updates? How do they work collaboratively? Who’s responsible for testing and validation? How does a project actually come together? If they have public plugins, what are the reviews like and what issues are people having? We have also seen individuals take on projects that were just too big for one person and then, when they’re overwhelmed, they’ve walked away. Try to get a sense of whether or not the developer or development team has the right skill set and/or the right people in place to handle everything that’s needed.

Ask about training and maintenance. Building a LearnDash site means a lot more than setting up a site and installing some random plugins—yet we see that happen a lot. Your goal also shouldn’t just be to have a site that seems functional at the end; it should be to have a LearnDash site that you understand how to use and leverage to improve your business. When we’re investigating a new site, we almost always have a conversation that goes like this: “Do you know why this is set up this way?” “No.” “Do you have any documentation that might explain it?” “No.” “Is there any way you could find out?” “No.” As a site owner, we understand how scary it can be for you when we ask those questions and you realize you don’t really understand your site. From the beginning you need to make every effort to ensure you’re working with a partner that won’t leave you in that situation. Training and communication throughout a project are absolutely essential. We average creating maybe 4 screencasts per project so that clients always have a point of reference for how things work and why. Find out what your partner’s process is to make sure you’ll be left in a place where you’re comfortable. Also confirm what’s typically required following projects in terms of maintenance and who will be taking care of that. For most projects we are able to hand things off in a way that clients can safely make updates themselves and we’re only needed for answering questions on an ongoing basis—not to keep things up and running.

Don’t be driven just by price. You will inevitably get what you pay for. We’ve taken on a few projects that we scoped out months or even years previously; the business decided to go with a different vendor that was a lot less expensive, and then they came back to us to fix them, often at a higher price than they would have paid if we’d just done the project originally. Budget is a huge consideration, of course, but it should be carefully balanced against other factors like the competence of the developer, your relationship with them, the developer’s experience in similar projects, etc.

Understand exactly what will happen during the project. If you start a project, then leave it in the developer’s hands for 2 months and suddenly get an email at the end saying it’s all done, you’re going to end up with a bad site. Take some time to understand what’s going to happen during the project and how collaboration will work. What do you need to provide? What are your responsibilities and what are the developer’s? What are the milestones? To meet the timelines, how do reviews work and how quickly do things need to be turned around from both parties? Are there any dependencies or bigger risks that everyone should be aware of? How will you and the developers keep each other updated and make sure things are progressing as expected?

The tips above should go a long way in helping you select and retain a vendor that’s the right fit for your LearnDash project. Sometimes, however, it’s still not enough, and due to unforeseen circumstances projects can still go off track. While this is just a quick list, here are some things you should be doing during the project to encourage positive outcomes:

Be involved. Some of our worst projects (and yes, we’ve had a few that disappointed both parties) were when clients just dropped communication. They got too busy or had other priorities, or just stopped caring about the site. We’ve had projects delayed 6-12 months because of client delays, and when that happens it inevitably leads to bad outcomes. Objectives get lost, people stop caring as much, the results just aren’t there. The best projects are when everyone is on the same page and working collaboratively at the same time. We’re adding features and testing while the client is adding content and providing feedback. We’re having discussions to address scope creep or new problems. Being active and engaged is one of the best ways to see good results.

Test continuously. Very recently we took over a project where testing on the site by the client didn’t begin until the day before launch. The site was extremely complex and, of course, everything was broken. That’s when the developer realized they were in over their heads and the client realized they were in an unimaginable amount of trouble. It’s an avoidable situation though. With WordPress LMS sites it’s not like everything is suddenly ready one day; pieces will be finished throughout the project that can be tested independently. Be involved and testing often not only helps identify issues early but it’s a chance to understand your site better and work collaboratively.

Maintain a good relationship. Yes, even if your developer is doing a terrible job and you’re miserable, try not to throw the entire relationship away if you’re in the middle of development. We’ve seen angry developers lock companies out of their sites. Like it or not, and the legal side can be messy when you’re working with partners in other states or countries, your developer can make things very difficult for you if they host and/or have admin access to your WordPress site. If you need to sever a relationship with a WordPress developer try to gain control of the site before things sour too much.

The goal of your LearnDash development project is to always end up with win/win situations for you and your developer. They are possible, and by following some of the guidance in this article we hope you’re able to partner with a great LearnDash development team for your WordPress LMS project.

To Quiz or Not to Quiz?

Having gone through years of schooling, most of us are used to taking and passing tests during or at the end of our learning process. Some of these tests are major milestones and others may determine whether our learning is deemed ‘completed’ or ‘successful’. Some teachers may find constructing and administering tests more straight forward than developing other types of assessment. Often these tests get created at the end of a course development process, driven by the subject matter rather than by expected performance outcomes.

For workplace learning or soft skills training in which application is more important than memorizing facts, tests may not be the most appropriate assessment method. Most test questions are not designed to allow students to engage in critical thinking and reflection or a deeper analysis of the learning material.

There are alternatives to tests, such as writing assignments, collaborative projects, and case studies, that can avoid the problems often associated with tests and quizzes. The key is to design authentic assessments that simulate real-life situations so students can actually learn from the process (Palloff & Pratt, 2013)1. Although group projects can be harder to manage online, they allow your learners to create and be part of a community of practice. After all, if the application of skills doesn’t occur in isolation, why should learning of such skills take place in a vacuum?

There are, of course, benefits to tests. Here are some of the occasions when tests are not only appropriate but good strategies to enhance learning:

  • Use pre-tests to introduce new material: A quiz, when used as a pre-test, can provide your learners with a preview of what they are about to learn. The intention of the test is to get your learners to realize what they don’t know and make them want to know more. These questions can also help students focus on the most important knowledge and skills addressed by your course.
  • Use post-tests to reinforce main points and check understanding: After a lesson is concluded, consider using a self-assessment to review the material covered. A well designed post-test provides learners with personalized feedback tied to what they just completed. It helps them self-evaluate whether they have a good grasp of the material. These frequent, low-stakes assessments can also help students gain proficiency before they attempt the final assessment2.
  • Use formal tests to validate competency: At a logical break point, use a formal test to help learners synthesize their learning. Align test questions to the learning objectives. As much as possible, include application questions (e.g., case scenarios) in this type of tests to help learners apply what they learned in simulated situations.

To quiz or not to quiz? Perhaps there isn’t a straight-forward answer, but ask yourself what the intended learning outcome is before you make it the primary choice for assessment.

Palloff, R. M., & Pratt, K. (2013). Lessons from the virtual classroom: The realities of online teaching (2nd ed.). San Francisco: Jossey-Bass.

Weise, M. R., & Christensen, C. M. (2014). Hired education: Mastery, modularization, and the workforce revolution. Redwood City, CA: Clayton Christensen Institute.

Introducing the Uncanny LearnDash Toolkit Pro Modules

Earlier this year we released our first public plugin to the WordPress Repository. The Uncanny LearnDash Toolkit has developed a huge following since its release, with over 1,000 active installs and over 4,000 downloads, and we wanted to take that foundation and add a number of new capabilities that would help LearnDash site owners really take their learner experience to the next level.

The Pro set of modules for the Uncanny LearnDash Toolkit is our first paid plugin and represents the culmination of hundreds of hours of internal development time. The new modules are considerably more complex than what’s in the current plugin, but they’re also very powerful and fundamentally change what’s possible with LearnDash sites.

Here are the modules included in the initial release of the Pro plugin (usage instructions are left to our Knowledge Base articles in the links because of module complexity):

Autocomplete Lessons and Topics: As simple as it sounds, this module marks lessons and topics as completed when the page is visited so learners no longer have to click Mark Complete on lessons and topics.

Simple Course Timer: Adds time tracking to LearnDash courses. Both total course time (across course, lesson, topic and quiz post types) and course completion time are recorded as learners complete learning activities. Results are added to LearnDash reports and can be displayed to users via shortcodes.

LearnDash Group Expiration: Expire course access for LearnDash Groups by calendar date. On a specific date, all courses can be removed from a LearnDash Group (revoking access for associated users), making it easier to sell courses to organizations and remove access automatically.

Enhanced Course Grid: This module provides an alternative way to display courses in a grid-based system that’s particularly useful to signed-in users. It’s extremely flexible.

Course Dashboard: We took the basics of the ld_profile shortcode but modified the design (and content) to fit seamlessly into typical landing pages for learners.

Learner Transcript: This report shortcode generates a printable view of user progress across all LearnDash courses. It’s a better way for learners to share their accomplishments offline and with other parties.

Duplicate Pages and Posts: A simple module that clones LearnDash post types, but with proper support for quizzes and quiz questions. With this module you can skip the export/import quiz steps normally recommended.

Days Until Course Expiry: Show learners the number of days until access expires (rather than the calendar date available with LearnDash).

Drip Lessons by LearnDash Group: Set specific drip dates for every LearnDash group instead of every group being bound to the same dates.

LearnDash Table Colors: Adds a simple way to restyle LearnDash course, lesson, quiz and dashboard tables by changing the colors of the header background and text.

LearnDash Group Registration: Adds a front-end registration function for adding users to both WordPress and LearnDash Groups at the same time. It even supports users switching groups or adding additional groups to a user from the front end. Gravity Forms or Theme My Login are recommended for this module but not required.

The Pro plugin requires PHP 5.3 or higher, LearnDash 2.1 or higher, and the Uncanny LearnDash Toolkit version 1.3 or higher. These 3 things are really important, so please make sure your site is updated before you purchase and install the Pro modules!

Some of the new modules are reasonably complex, and it’s very important that you read the Knowledge Base articles and watch the screencasts before you start using the plugin. If you do run into any problems or questions, send us a note!

We hope you like the new Pro modules and that they help to improve your LearnDash sites!

BUY NOW

Who Reads Learning Outcomes?

If you do a search online, you’ll find plenty of resources on how to write good learning outcomes, and how not to confuse learning outcomes with learning objectives. “Outcomes” or “objectives”, the reality is your learners seldom pay attention to them. They skip this screen. They fast forward. So for whom are learning outcomes really written?

Don’t get me wrong. Learning outcomes are written for the learners. But they seem to be there as a reminder to the instructor and instructional designer of what the focus of the training should be, like how PowerPoint is often misused as the presenter’s teleprompter.

So should you skip learning outcomes all together? Not at all. There are ways you can state learning outcomes that are informative and actually get your learners’ attention. Here are some strategies.

1. Pose learning outcomes as questions

Rather than telling your learners what they should be able to do at the end of the lesson, consider asking them a series of open-ended questions for which they don’t yet have answers until they complete the lesson. These questions are intended to raise the learners’ curiosity and get them to want to learn more.

2. Use a pre-test to frame learning outcomes

An alternative to the first strategy is using a pre-test. The test should be short and fun. In fact, it should not look like a test. As with the first strategy, the intention of the test is to get your learners to realize what they don’t know from the cues to the key points of your lesson.

WordPress Tip: If you’re not grading pre-tests to support Level 2 evaluation, LearnDash and other LMS quizzes can be heavy for this type of pre-test. Consider an H5P element or simple text questions instead.

3. Use a case scenario to model learning outcomes

Learning outcomes are meant to describe desired behaviour. So, why not present a case scenario that models the intended outcomes? The learners get to see what they will be able to do at the end of the lesson. Have them buy into what they can achieve will increase their motivation to learn.

4. Use a short introductory video to tell a story

Contrary to the previous strategy, a story that makes personal connections will warm up the learner. On the other hand, a story that describes a problem causes tension; it will make the learner want to resolve it. Either way, your introduction will engage the learner and make the content more relatable.

Learning outcomes don’t have to be boring. If you take care of the presentation of your learning outcomes, your learners will be less inclined to skip them.

7 Principles of Good Feedback in eLearning

elearning-feedbackEvery  teacher knows that it’s important to provide students with regular feedback during their learning process. Without feedback, your learners simply don’t know how well they are doing. In self-paced online learning, how do you gauge the learners’ progress when there is no instructor to provide feedback and guide their learning?

Nicol and Macfarlane‐Dick (2006)1 identified seven principles of good feedback practice. In this post, we’ll discuss how you can incorporate feedback—in particular, how to apply these principles—in self-paced online learning.

  1. Good feedback helps clarify what good performance is

    What’s been done: An approach that has proved particularly effective in clarifying performance goals and standards is to model exemplary performance. Without concrete, worked examples, concepts are just abstract ideas. In self-paced online learning, this can be achieved with case studies in which learners can identify good performance in the presented scenario.
    What you can do: When designing a case scenario, consider breaking it into multiple parts. After presenting a case, ask the learner what they would do in that scenario—this could be done with a multiple-choice question with possible reactions. Reveal the answer only after the learner has given it some thought. Your answer will be more meaningful if they interact with the material first.
    WordPress Tips: Quiz tools in LearnDash and other LMS plugins can be disruptive to learning for short reflective assessments; try an H5P module instead, which can be embedded directly into the lesson page.

  1. Good feedback facilitates the development of self-reflection in learning

    What’s been done: Provide opportunities for learners to ask “where am I now?” In self-paced online learning, this is especially important if your course is broken down into many lessons, and the learner has the option to take them in any order.
    What you can do: At the end of each lesson, consider providing the learner with a concept map showing them where they are in the course. If possible, tie it with the lessons that the learner has completed to show connections. This gives them an opportunity to do a self-check before they move on to a new lesson.

  1. Good feedback delivers high quality information to students about their learning

    What’s been done: Good feedback is personalized, specific to the individual learners. This can be done with a self-assessment, which may include multiple-choice, true/false, or short-answer questions with feedback tied to the lesson or topic that the learner just completed. This helps the learner self-evaluate whether they have a good grasp of the material.
    What you can do: Consider including customized feedback that helps the learner adjust their learning. For example, you may suggest that they review the lesson (or certain sections of it) if they answer most of the self-assessment questions wrong. You may provide more feedback if a key question that is directly linked to a performance goal is answered incorrectly.
    WordPress Tips: Conditional feedback can be difficult in WordPress, but most quiz tools support feedback or graduation text that can be used to provide insight and recommendations based on learner answers (or use something that supports conditional feedback, like Gravity Forms). For personalized feedback, we like using the shortcode on LearnDash platforms to address the learner by name wherever possible.

  1. Good feedback encourages teacher and peer dialogue around learning

    What’s been done: One way of increasing the likelihood that your feedback will be taken in by the learners is to frame it more as dialogue rather than as instruction. This can be done with a few follow-up questions at the end of a lesson that ask the learner how they might apply what they learned in a context that’s directly relevant to them.
    What you can do: In self-paced online learning, if there is a blog or forum associated with your course, consider encouraging the learner to discuss your follow-up questions with their peers. This can be very effective when the feedback is highly contextual. Using feedback to generate discussions also encourages communities of practice in which learners who share common interests can learn from and support one another.
    WordPress Tips: bbPress is a great way to incorporate a simple forum and you can link to specific threads inside LearnDash lessons and topics. Be aware that taking users to a forum removes them from the course context, so make sure it’s easy for users to navigate back to where they were (like with the Resume button in our Toolkit, or easy access to a dashboard page).

  1. Good feedback increases students’ motivation to learn

    What’s been done: As mentioned above, feedback can be embedded in a series of “check your understanding” review questions. The bite-size evaluation allows your learners to grasp concepts in smaller, manageable chunks, leveraging each step of their learning as building blocks.
    What you can do: “Drop-out” caused by low motivation is often considered the biggest challenge in online learning. Bite-size learning with self-assessment allows your learner to celebrate their progress. Success breeds success—the gradual approach helps to build up the learner’s confidence and increase their motivation to learn. You may also consider using badges to reward the learner’s milestone achievements.
    WordPress Tips: For next-level automated engagement, one intervention we really like is hooking LearnDash activities into Active Campaign, a powerful but inexpensive Marketing Automation tool. It’s not just for marketing—it’s a very effective way of keeping learners engaged by sending communications based on their learning activities. (At the time of writing, our Active Campaign integration for LearnDash isn’t available to the public but can be added to client sites.)

  1. Good feedback provides opportunities to close the gap between current and desired performance

    What’s been done: The end goal of providing feedback is to help learners achieve mastery and improve performance. Self-assessment at the end of a lesson can mimic the same ‘task-feedback-performance’ cycle.
    What you can do: Your feedback should help the learner recognize the next steps in learning and how to take them. It can also show how the gap between their current and desired performance is shortened each step of the way.

  1. Good feedback provides information to teachers that can be used to help shape teaching

    What’s been done: Self-assessment is often not evaluated. However, there is significant learning data that can be extracted from these assessments to guide the student’s learning path. Their learning becomes more relevant and meaningful which, in turn, will further increase their motivation to learn.
    What you can do: Take advantage of the user progress reports that your LMS generates to better understand where your learners are. The data can help you assess the average performance of the class, and identify who may need more attention. It can also help you make improvements to your course that will benefit future learners.
    WordPress Tips: We know that progress over time can be difficult to track with WordPress LMS plugins. Running reports at defined periods and then comparing them can help; report customization is also an option.

In self-paced online learning, students are already assessing their own work and generating their own feedback. Well-designed feedback creates individualized learning experience that will result in more satisfied learners.

Nicol, D. J., & Macfarlane-Dick, D. (2006). Formative assessment and self‐regulated learning: A model and seven principles of good feedback practice. Studies in Higher Education, 31(2), 199-218.