After upgrading to WooCommerce version 2.0 and above, you may have experienced the issue where purchased orders using PayPal do not get completed. All the purchased order changes to the “canceled” status. In the admin area, all the orders appear as “canceled” with the message “Unpaid order canceled – time limit reached“. When this happens, you need manually change the statuses of all the canceled orders.
The problem arises due to the Hold Stock feature in WooCommerce Inventory management. In this feature, you can set a certain period of time to hold the stock for an unpaid order. During this time the status of the order is changed to “pending”. After the time limit is reached and the order is not paid, the pending order will be canceled. By default, WooCommerce will cancel the orders that remain in pending status for an hour.
This issue can be resolved easily. Go to the admin side of your WordPress store, and navigate to WooCommerce > Settings > Products > Inventory.
From this page, you can see that the Hold Stock field is set to 60 minutes by default. If you are using WooCommerce stock management, you can disable this feature by leaving the field blank. Simply delete the value in the field and then save the changes.
This will ensure that there is no timeout when PayPal or any other payment tries to process the order automatically. Normally, the payment should be processed within a minute or two. PayPal and WooCommerce do not work very well together when the Hold Stock field has value in it. So, it is better to leave the field blank.