← Back to Blog
WooCommerce

WooCommerce Order Not Completing? Fix It Step by Step

June 27, 2026 59 views Amanur Rahman
WooCommerce orders stuck on Pending Payment or not completing? Here's a step-by-step fix guide covering payment gateways, caching, WP Cron, plugin conflicts, and server issues — from a WooCommerce developer with 14+ years of experience.

If your WooCommerce orders are stuck on "Pending Payment" or simply not completing, you're not alone. This is one of the most common — and most damaging — issues store owners face. Customers try to pay, the order never goes through, and sales are lost silently in the background.

I've fixed this exact problem for WooCommerce clients across the US and UK over my 14+ years as a WooCommerce developer. In this guide, I'll walk you through the exact steps to diagnose and fix it — no fluff, just the real causes and solutions.

⚠️ Important: Don't start randomly deactivating plugins or reinstalling WooCommerce. That causes more problems. Follow this checklist in order and you'll find the root cause fast.

Why Do WooCommerce Orders Fail to Complete?

Before jumping into fixes, here are the most common root causes:

  • Payment gateway misconfiguration or expired API keys
  • Webhook / IPN not reaching your server
  • Caching plugin interfering with checkout sessions
  • WP Cron disabled, blocking payment status updates
  • Plugin or theme conflict breaking the checkout flow
  • Server firewall blocking payment gateway callbacks
  • SSL certificate error causing secure payment failure

Step 1: Test With a Simple Payment Method First

Step 01

Before touching the payment gateway, rule out whether the issue is in your checkout flow itself or the payment method.

Go to WooCommerce → Settings → Payments and temporarily enable Cash on Delivery or Bank Transfer. Place a test order using that method.

If the order completes — your checkout flow is fine. The problem is isolated to the payment gateway. This single step saves hours of debugging in the wrong place.

If the order still doesn't complete — the issue is in your WooCommerce setup itself (caching, sessions, or a plugin conflict). Move to Step 2.

Step 2: Check Your Payment Gateway Settings

Step 02

This is the most common cause of orders not completing. Even a single wrong setting can silently break all payments.

Go to WooCommerce → Settings → Payments and open your active gateway. Check:

  • Live vs Test mode — are you accidentally in test/sandbox mode on a live store?
  • API keys — have they been regenerated in your gateway dashboard but not updated in WooCommerce?
  • Webhook URL — is it correctly configured in your gateway's developer dashboard?

For Stripe — Check Your Webhook Endpoint

Go to Stripe Dashboard → Developers → Webhooks. The endpoint should point to your site:

# Standard Stripe WooCommerce Plugin:
https://yourdomain.com/?wc-api=wc_stripe

# Payment Plugins for Stripe:
https://yourdomain.com/wc-api/wc_stripe

If the webhook is missing, misconfigured, or failing — orders will never move out of "Pending Payment" status.

For PayPal — Check IPN Settings

Log into PayPal → Account Settings → Notifications → Instant Payment Notifications. Make sure IPN is enabled and pointing to your site URL.

Step 3: Disable Caching on Checkout Pages

Step 03

Caching is a silent killer for WooCommerce checkout. A cached checkout page breaks sessions, which breaks orders.

In your caching plugin (WP Rocket, W3 Total Cache, LiteSpeed Cache, etc.), add these pages to the exclusion list:

/cart
/checkout
/my-account
/wc-api

Also disable caching for logged-in users if your store has registered customers. After making changes, clear all cache and test again.

💡 Pro tip: If you're using Cloudflare, make sure the checkout page is not being cached at the CDN level. Add a Page Rule to bypass cache for /checkout*.

Step 4: Check WooCommerce System Status

Step 04

WooCommerce has a built-in diagnostic panel that shows server configuration issues — check it before digging deeper.

Go to WooCommerce → Status → System Status. Look for anything highlighted in red or yellow:

  • PHP version — needs to be 7.4 minimum, ideally 8.1+
  • Max execution time — should be 300 seconds minimum
  • WordPress memory limit — 256MB recommended
  • WP Cron — if disabled, payment status updates will not process

WP Cron Disabled? This Is Critical

If you see DISABLE_WP_CRON set to true in wp-config.php, scheduled payment callbacks will never fire. Either re-enable it:

// Remove or set to false in wp-config.php:
define('DISABLE_WP_CRON', false);

Or — the better approach for high-traffic stores — set up a real server-side cron job that hits wp-cron.php every 5 minutes.

Step 5: Check for Plugin or Theme Conflicts

Step 05

A badly coded plugin or incompatible theme can silently break WooCommerce checkout without throwing a visible error.

The safest way to test: deactivate all plugins except WooCommerce and your payment gateway plugin. Switch to Storefront or Twenty Twenty-Four theme. Try placing a test order.

If it works — reactivate plugins one by one, testing after each, until you find the culprit. Common offenders:

  • Security plugins (Wordfence with aggressive firewall rules blocking payment callbacks)
  • Minification/optimization plugins breaking checkout JavaScript
  • Checkout customization plugins with conflicting scripts
  • Page builder plugins (Elementor, Divi) with custom checkout templates

Step 6: Check WooCommerce Logs for Errors

Step 06

WooCommerce logs every payment event. This is the fastest way to see exactly what went wrong during a failed order.

Go to WooCommerce → Status → Logs. Select your payment gateway from the dropdown and look at entries around the time of a failed order. You'll often see the exact error — invalid signature, webhook timeout, failed API call, or a PHP fatal error only triggered during checkout.

💡 Also check: Your server's PHP error log and Apache/Nginx error log. Sometimes the error happens at the server level and never reaches WooCommerce logging at all.

Step 7: Check Your Server Firewall and Hosting Configuration

Step 07

Sometimes the payment gateway sends a callback to your server — and your server blocks it. This is more common than people think.

Your server's firewall or WAF (Web Application Firewall) may be blocking incoming requests from payment gateway IP addresses. Check:

  • Payment gateway IPs are not blocked in your firewall rules
  • Outgoing HTTP requests from PHP (wp_remote_post) are not restricted
  • ModSecurity rules are not triggering on payment callback URLs
  • Your hosting doesn't block outgoing connections on non-standard ports

If you manage your own server (VPS or dedicated) on AlmaLinux, cPanel, or aaPanel — check your firewall whitelist and make sure payment gateway IP ranges are explicitly allowed.

Quick Reference Checklist

Root Cause Fix
Payment gateway in test modeSwitch to live mode
Wrong or missing webhook URLUpdate in gateway dashboard
Caching on checkout pagesExclude /cart, /checkout from cache
WP Cron disabledRe-enable or set real server cron
Plugin conflictDeactivate plugins one by one
Server blocking gateway callbacksWhitelist gateway IPs in firewall
PHP error during checkoutCheck WooCommerce and server logs
Expired API keysRegenerate and update in WooCommerce

Still Not Fixed? It's Likely a Code-Level Issue

If you've worked through every step above and orders are still not completing, the issue is almost certainly in custom code — a poorly written plugin, a theme function hook conflicting with WooCommerce, or a custom checkout page that's not passing required fields correctly.

As a WooCommerce developer with 14+ years of experience, I've fixed checkout issues like this for clients across the US and UK — from Stripe payment freezes on Safari iOS to orders stuck in pending due to webhook failures on custom server configurations. If you're losing sales and need it fixed today, get in touch and I'll dig into the root cause.

WooCommerce Orders Not Completing? Let's Fix It.

Get expert diagnosis and a permanent fix — not a workaround. I'll find the root cause and resolve it fast.

Hire a WooCommerce Developer →

Frequently Asked Questions

Why is my WooCommerce order stuck on "Pending Payment"?

This usually means the payment was initiated but the gateway never confirmed it to WooCommerce. The most common causes are a missing or incorrect webhook URL, WP Cron being disabled, or a server firewall blocking the payment gateway's callback request.

WooCommerce order is not completing after payment — what should I check first?

Start with your payment gateway webhook settings and check WooCommerce logs (WooCommerce → Status → Logs) for errors around the time of the failed payment. These two steps identify the root cause in 80% of cases.

Can a caching plugin cause WooCommerce orders to not complete?

Yes — if the checkout page is cached, WooCommerce session data breaks, which causes orders to fail. Always exclude /cart, /checkout, /my-account, and /wc-api from your caching plugin and Cloudflare Page Rules.

How do I test if my payment gateway is the problem?

Enable Cash on Delivery or Bank Transfer temporarily and place a test order. If it completes successfully, the issue is specific to your payment gateway — not the WooCommerce checkout flow itself.

Does WP Cron affect WooCommerce order completion?

Yes. WooCommerce uses WP Cron to process scheduled payment status checks. If WP Cron is disabled via wp-config.php, orders that depend on delayed payment confirmation (like certain gateway callbacks) may never update from Pending to Processing.

How much does it cost to fix WooCommerce order completion issues?

It depends on the root cause. Simple fixes like webhook configuration or caching exclusions can take under an hour. Complex issues involving custom code conflicts or server-level firewall problems may take 2–4 hours of developer time. Most fixes are one-time and permanent.

Tags: WooCommerce WooCommerce Order Pending Payment WooCommerce Fix Payment Gateway WooCommerce Troubleshooting WooCommerce Developer

Need Help with Your WordPress Project?

Let's discuss how I can help you build something amazing!

Get in Touch →
← Back to Blog