When a student purchases a course on a LearnDash website, they expect immediate access to the course content. The payment gateway processes the transaction and sends a confirmation to LearnDash, which should then enroll the student in the course. However, sometimes the payment is successful (the student’s credit card is charged), but LearnDash never grants access to the course, leaving the student confused and the site owner with a support headache.
This problem is particularly damaging because it directly impacts revenue and customer satisfaction. Students who have paid but cannot access the course may request refunds, leave negative reviews, or never return to the site. The issue may affect all payment gateways or only specific ones, and it may appear suddenly after updating LearnDash, the payment gateway plugin, or the WordPress theme.
The most common cause of this problem is that the payment gateway’s IPN (Instant Payment Notification) is not reaching the LearnDash site. Another cause is that the WordPress cron system is not running properly, preventing scheduled tasks like enrollment processing from executing. Server configuration issues, such as blocked IPN requests or missing SSL certificates, can also prevent access from being granted.
Why LearnDash course access fails to update after payment
When a student completes a payment through a gateway like PayPal or Stripe, the gateway sends an IPN (Instant Payment Notification) to the LearnDash site. This notification contains the transaction details, including the student’s email address, the course ID, and the payment status. LearnDash processes this notification and enrolls the student in the course. If the IPN is not received or cannot be processed, the student will never be enrolled.
PayPal IPN is particularly sensitive to server configuration issues. The IPN request must be received at the correct URL (typically /?paypal_ipn=1 or a similar endpoint), and the server must respond quickly. If the site uses a caching plugin that caches the IPN endpoint, PayPal may receive a cached response instead of processing the notification, causing the IPN to fail [citation:2].
Another common cause is that the WordPress cron system is not running properly. LearnDash uses scheduled tasks (cron jobs) to process certain actions, including enrollment confirmations. If WP-Cron is disabled or not triggering correctly, these tasks may never execute. On low-traffic sites, WP-Cron may not run frequently enough, causing delays in enrollment processing.
How to check if IPN requests are reaching the LearnDash site
Check the payment gateway’s IPN history (in PayPal, go to Account Settings → Notification Preferences → IPN History). Look for IPN messages sent to your site. If IPNs are listed with a status of “Retrying” or “Failed,” the gateway cannot reach your site. If no IPNs are listed, the gateway is not sending them at all, which may indicate a configuration issue in the gateway settings.
Step by step guide to fixing LearnDash enrollment problems
Follow these steps in order to restore automatic course access after payment. Start with the simplest solutions before moving to more advanced troubleshooting steps.
- Check the payment gateway’s IPN history for failed or retrying messages
- Verify that the IPN URL is correctly configured in the payment gateway settings
- Ensure that the site has a valid SSL certificate (HTTPS is required for most payment gateways)
- Exclude the IPN endpoint URL from caching plugins (add /?paypal_ipn=1 to the exclusion list)
- Check that the WordPress cron system is running properly (install a cron monitoring plugin)
- Set up a real cron job on the server to replace WP-Cron for reliable scheduling
- Temporarily disable all security plugins to test if they block IPN requests
- Check the PHP error logs for any fatal errors during IPN processing
- Update LearnDash and the payment gateway plugin to the latest versions
- Manually enroll affected students using the LearnDash admin interface
How to set up a real cron job for reliable LearnDash processing
Add the following line to the server’s crontab file (using cPanel or command line) to run WP-Cron every 5 minutes. This ensures that scheduled tasks are processed reliably even on low-traffic sites. Then, disable WP-Cron by adding define(‘DISABLE_WP_CRON’, true); to the wp-config.php file to prevent conflicts between the real cron and WP-Cron.
*/5 * * * * wget -q -O - https://yoursite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
LearnDash enrollment troubleshooting reference table
Here is a reference table for diagnosing enrollment problems in LearnDash based on specific symptoms you might encounter.
| Symptom | Most likely cause | Recommended solution | Payment successful but no course access | IPN not reaching site or not processed | Check IPN history and exclude IPN endpoint from cache |
|---|---|---|---|---|---|
| Access granted after long delay (hours) | WP-Cron not running frequently enough | Set up real cron job on the server | Some payment methods work, others do not | Gateway-specific IPN configuration issue | Check IPN settings for each payment gateway individually | Access works for new students but not for recurring payments | Subscription IPN handling issue | Check recurring payment IPN configuration and logs |