• Resolved tudorachedesign

    (@tudorachedesign)


    ENVIRONMENT

    • WordPress: 7.1.1
    • WooCommerce: 11.1.1
    • Fluid Checkout (free): 4.2.7
    • PHP: 8.3 and 8.2 (reproduced on both)
    • Server: LiteSpeed (Hostinger shared)
    • Theme: Hello Theme by Elementor

    SYMPTOM
    Since updating to WooCommerce 11, the checkout page shows an endless spinner. The AJAX request ?wc-ajax=update_order_review never finishes: the PHP process is killed and LiteSpeed returns HTTP 503. get_refreshed_fragments and every other wc-ajax endpoint work normally (~0.3s).

    ROOT CAUSE
    Your templates fc/checkout-steps/checkout/form-billing.php and form-shipping.php fire the core actions for compatibility:

    do_action( 'woocommerce_checkout_billing', $checkout );   // form-billing.php
    do_action( 'woocommerce_checkout_shipping', $checkout );  // form-shipping.php, line 78

    WooCommerce core still has WC_Checkout::checkout_form_billing / checkout_form_shipping hooked on those actions. Fluid Checkout is supposed to remove them, but with WooCommerce 11 the remove_action() no longer matches the registered callback, so the core method stays attached. The template fires the action → core method calls wc_get_template('checkout/form-billing.php') → Fluid Checkout’s template override is loaded again → it fires the action again → infinite loop until the process is killed.

    I suspect WooCommerce 11 changed how those callbacks are registered (e.g. first-class callable / Closure instead of array( $this, 'method' )), which is why the old remove_action( $hook, array( WC()->checkout(), 'checkout_form_billing' ) ) silently fails.

    EVIDENCE

    1) PHP 8.3 fatal (zend.max_allowed_stack_size):
    PHP Fatal error: Maximum call stack size of 8339456 bytes reached during compilation …/fluid-checkout/templates/fc/checkout-steps/checkout/form-shipping.php on line 64

    2) Backtrace logged from inside the template (each 6-frame block repeats until the process dies):
    04 wc_get_template
    05 WC_Checkout->checkout_form_billing
    06 WP_Hook->apply_filters
    07 WP_Hook->do_action
    08 do_action
    09 include
    10 wc_get_template
    11 WC_Checkout->checkout_form_billing
    12 WP_Hook->apply_filters
    …
    Identical pattern for checkout_form_shipping / form-shipping.php.

    3) Template include counter: checkout/form-billing.php included 38,050 times in a single update_order_review request before the process was killed.

    4) Every nested include logs the same warnings because core passes only $checkout, not your variables:
    PHP Warning: Undefined variable $is_billing_same_as_shipping in …/form-billing.php on line 23
    PHP Warning: Undefined variable $billing_same_as_shipping_fields in …/form-billing.php on line 37
    PHP Warning: foreach() argument must be of type array|object, null given in …/form-billing.php on line 37
    PHP Warning: Undefined variable $billing_only_fields in …/form-billing.php on line 49

    HOW TO REPRODUCE

    1. Clean WordPress install, WooCommerce 11.1, Fluid Checkout (latest), PHP 8.2 or 8.3.
    2. Add any product to the cart and open the checkout page.
    3. Open DevTools → Network. Observe ?wc-ajax=update_order_review: it never returns (503 on LiteSpeed, 500/timeout elsewhere). On PHP 8.3 the “Maximum call stack size” fatal above appears in debug.log.
    4. To confirm the loop, drop this in wp-content/mu-plugins/ and reload the checkout — it logs the include depth of the template:
      https://pastebin.com/RcfdiRE7
    5. Also verify the core callback is still attached after Fluid Checkout has run (it should not be):
      https://pastebin.com/6nH7vtZP

    On my install the core callback is still present on both hooks when the checkout renders.

    WORKAROUND I AM USING
    A mu-plugin that blocks re-entry of the two templates via the wc_get_template filter (returns an empty file when the same template is requested while already rendering). With this in place update_order_review completes in ~0.6s and the checkout works. It is a band-aid; the proper fix is to make the core callback removal work with WooCommerce 11 (match by method name across array callbacks and Closures, or remove the do_action from the templates and re-add only third-party callbacks).

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Support Luiggi B.

    (@luiggiab)

    Hello @tudorachedesign

    We could not reproduce this issue with the latest versions of Hello Elementor, WooCommerce, and Fluid Checkout.

    1. This error is probably a conflict between plugins, so it would be helpful if you could run a plugin conflict test to find out which plugin or theme might be conflicting with Fluid Checkout.

    Basically, you temporarily deactivate all plugins except for WooCommerce and Fluid Checkout, then re-activate each plugin one by one until you find one that causes the issue. Ideally this should be done in a test/staging copy of your website. You can find more specific instructions in the article below from WooCommerce:
    https://docs.woocommerce.com/document/how-to-test-for-conflicts/

    Once we know what plugin or theme is causing this compatibility issue with Fluid Checkout, then we can work on fixing it.

    Kind regards,
    Luiggi

    • This reply was modified 1 week, 1 day ago by Luiggi B..

    I had the same problem and discovered that it’s a compatibility issue with Elementor 4.3.0; I fixed it by reverting to Elementor version 4.2.4.

    Plugin Support Luiggi B.

    (@luiggiab)

    @juanready @tudorachedesign

    Juan, thanks for new information.

    We will continue investigating this based on the Elementor 4.3.0 compatibility issue you identified, and check whether we can reproduce the problem with that version and the current WooCommerce and Fluid Checkout versions.

    We will get back to you with an update once we have more information.

    Kind regards,
    Luiggi

    Plugin Support Luiggi B.

    (@luiggiab)

    @tudorachedesign @juanready

    We tested with WooCommerce, Fluid Checkout, Hello Elementor, and Elementor 4.3.x, but we could not reproduce the endless spinner / update_order_review hang on our side.

    This suggests there is likely another plugin, setting, or configuration involved that is triggering the issue.

    To narrow this down, please run the conflict test mentioned above. This should help us identify what is causing the issue in your environment.

    Once we know what plugin or theme is causing this compatibility issue with Fluid Checkout, then we can work on fixing it.

    Kind regards,
    Luiggi

    Plugin Support Luiggi B.

    (@luiggiab)

    This ticket is being closed due to inactivity. If you need further assistance related to this issue, simply reply to this message to re-open it.

    • This reply was modified 6 hours ago by Luiggi B..
Viewing 5 replies - 1 through 5 (of 5 total)

You must be logged in to reply to this topic.