woocommerce order status not updating after payment is a serious store issue because the customer may be charged while the order remains pending, on hold, failed, or cancelled. The payment provider and WooCommerce do not always update at the same moment. They communicate through redirects, callbacks, webhooks, APIs, and scheduled actions. If one step fails, the charge can succeed while the order workflow remains incomplete.

Contents
- 1 Why payment and order status can disagree
- 2 Start with the order notes and gateway logs
- 3 Check webhook delivery and response codes
- 4 Review security, CDN, and maintenance rules
- 5 Inspect scheduled actions and WP-Cron
- 6 Look for custom status logic and integrations
- 7 Preserve evidence before changing orders manually
- 8 Test the full payment flow after the fix
- 9 Related technical support
- 10 Conclusion
- 11 Frequently asked questions
Why payment and order status can disagree
The payment gateway records the financial transaction, while WooCommerce manages the order. A customer redirect may update one part of the flow, but the authoritative status often arrives through a server-to-server webhook. If the browser closes, the return URL fails, or the webhook cannot reach the site, the gateway may show “paid” while WooCommerce still sees “pending payment.”
Start with the order notes and gateway logs
Open the affected order and review the notes in chronological order. Look for payment intent IDs, transaction IDs, failed callbacks, duplicate notifications, authentication failures, or manual status changes. Then check WooCommerce logs and the gateway’s own dashboard. Match timestamps so you can see whether the provider sent a notification and how the website responded.
Check webhook delivery and response codes
Most gateways provide webhook history. Review the response code, response body, retry count, and signature status. A 403 may indicate a firewall or security plugin. A 404 may point to a wrong endpoint. A 500 indicates the request reached the site but application code failed. Timeouts suggest a slow server, locked process, or external dependency.
Review security, CDN, and maintenance rules
Cloudflare rules, bot protection, web application firewalls, basic authentication, maintenance mode, and security plugins can block gateway callbacks. The webhook endpoint must be reachable from outside the server. Excluding checkout pages from cache is not always enough; the actual webhook route and REST endpoints also need to work correctly.
Inspect scheduled actions and WP-Cron
Some payment extensions process events asynchronously through Action Scheduler or WP-Cron. Failed, overdue, or repeatedly retried actions can leave orders stuck. Review WooCommerce Scheduled Actions for related hooks, error messages, and execution times. On low-traffic stores, relying on visitor-triggered WP-Cron may delay processing.
Look for custom status logic and integrations
ERP, fulfillment, fraud screening, subscription, inventory, accounting, and shipping plugins may change order statuses or block transitions. Custom snippets can also override payment completion. Review code that hooks into payment_complete, order status changes, checkout processing, or gateway callbacks.
Preserve evidence before changing orders manually
When operations require a manual status change, first save transaction IDs, screenshots, gateway timestamps, order notes, and logs. Otherwise the original failure path may disappear. Verify that the payment is captured only once and check whether the customer retried checkout.
Test the full payment flow after the fix
Use a safe test transaction and confirm the order moves through the expected statuses. Verify stock reduction, confirmation email, payment capture, fulfillment integration, refunds, and webhook retries. A page that “looks fixed” is not enough if the backend order flow remains unreliable.
Related technical support
If this issue affects a live website, store, application, or business-critical workflow, the following service pages provide the most relevant support path.
Conclusion
woocommerce order status not updating after payment should be resolved by identifying the actual failure path, applying the smallest safe fix, and verifying the workflows that matter to users and the business.
Frequently asked questions
Why is a paid WooCommerce order still pending?
The payment may have succeeded while the callback, webhook, cron task, or order-status update failed.
Can a security plugin block payment webhooks?
Yes. Firewalls and security rules can block gateway requests or REST endpoints.
Should I change the order to processing manually?
Only after verifying the payment and preserving logs and transaction details.
Can this issue cause duplicate charges?
It can contribute to customer retries and confusion, so payment records must be checked carefully.