Summary
A Feedzy section using the lazy display state can remain on Loading... when its content request fails or returns an unexpected response. Expected behavior is for the section to exit the loading state and present feed content or a useful failure message. Instead, the initial indicator can remain indefinitely, leaving visitors without content or an explanation.
Customer context
Product / area: Feedzy RSS Feeds, frontend lazy feed rendering
Version: Customer version unknown; affected code is present through inspected release 5.2.5
Environment: WordPress; browser, PHP, WordPress, hosting, and cache details not provided
Integration / third party: REST API and source feed; exact response unavailable
Reported error / symptom: Financial News section ends with Loading...
Impact: Visitors can encounter a feed section that does not complete or explain the failure
Reproduction notes
Source-level reproduction inferred from the deterministic request path; no customer-site or local runtime reproduction was performed:
- Render an uncached
[feedzy-rss] shortcode with lazy='yes'.
- Load the frontend page so Feedzy displays its initial
Loading... container.
- Make the lazy REST request fail at the network or HTTP layer.
- Observe that request completion removes only the CSS
loading class while the original text remains.
The customer's exact request status and response are missing, so attribution of that runtime instance remains unverified.
Diagnosis
Conclusion
The lazy frontend failure path is defective in the inspected source. Feedzy initially renders Loading..., but its client replaces that text only in the AJAX success callback and has no request-error callback. A transport or HTTP failure therefore leaves the original text in place. The report matches this visible outcome, although the customer's failed request and response were not captured.
Where this likely occurs
- Frontend lazy shortcode surface:
includes/abstract/feedzy-rss-feeds-admin-abstract.php — Feedzy_Rss_Feeds_Admin_Abstract::feedzy_rss() lines 451–491 emits Loading..., the .feedzy-lazy container, request attributes, and REST endpoint data.
- Lazy request lifecycle:
js/feedzy-lazy.js — lazy-loader IIFE lines 13–50 sends the request; lines 40–45 replace content only on a success callback, while lines 47–49 merely remove the CSS class on completion and no error callback exists.
- REST route and callback:
includes/abstract/feedzy-rss-feeds-admin-abstract.php — Feedzy_Rss_Feeds_Admin_Abstract::rest_route() lines 540–557 validates a top-level nonce; Feedzy_Rss_Feeds_Admin_Abstract::feedzy_lazy_load() lines 570–612 can return JSON success, a structured application error, or a raw string from lines 602–605.
- Git history: commit
eda06d1 introduced lazy loading and this request structure in 2020, present from tag v3.3.18 through inspected tag v5.2.5. Commit 5f775dd added feed-specific nonce handling in 2025 but left transport and unexpected-response paths uncovered. The evidence indicates a long-standing gap rather than a recent regression.
Engineering notes
The confirmed defect is limited to the lazy shortcode request lifecycle inspected in the free repository; no corresponding request owner was found in the Pro repository. In addition to transport failures, the success callback assumes an object containing either data.content or data.message. The PHP callback's raw-string return path does not match that contract. The precise serialization of route-validation failures depends on WordPress REST behavior, whose source was not present in the plugin checkout and was not treated as locally confirmed.
Test coverage status
tests/e2e/specs/import.spec.js — import lazy loading feeds with shortcode lines 57–90 covers a successful request to a known external feed. It does not cover transport or HTTP failures, route validation rejection, malformed or unexpected response shapes, or the raw-string callback path. No relevant Pro coverage was found during inspection.
What to verify or explore next
- May be worth reproducing with an uncached shortcode using
lazy='yes' while forcing the REST request to fail at the network or HTTP layer.
- May be worth recording the rendered text, browser console, request status, and response body for a route-validation failure and for the callback's raw-string path.
- If the customer case remains reproducible, checking its shortcode attributes, plugin version, REST request, and source-fetch result could establish whether this confirmed path caused that instance.
- The focused e2e suite
tests/e2e/specs/import.spec.js can be used to compare successful and failed lazy requests.
Unknowns / follow-up
The ticket does not contain the customer request URL, HTTP status, response body, browser error, Feedzy version, shortcode attributes, logs, or source feed. It is therefore unknown which specific failure branch produced the reported indicator.
Confidence
Confidence: 88/100
Source inspection confirms that Feedzy's lazy frontend loader can retain its initial Loading... text after request failures, and no existing GitHub issue was found in targeted searches. The repeated-article symptom remains unconfirmed because the ticket contains no source feed, import counters, logs, or stored-post evidence tying it to product code.
Source: HelpScout #3402495948
Generated by bug-report-triage (ID: bug-report-triage_6a6ab037d48ac0.11043558)
Summary
A Feedzy section using the lazy display state can remain on
Loading...when its content request fails or returns an unexpected response. Expected behavior is for the section to exit the loading state and present feed content or a useful failure message. Instead, the initial indicator can remain indefinitely, leaving visitors without content or an explanation.Customer context
Product / area: Feedzy RSS Feeds, frontend lazy feed rendering
Version: Customer version unknown; affected code is present through inspected release 5.2.5
Environment: WordPress; browser, PHP, WordPress, hosting, and cache details not provided
Integration / third party: REST API and source feed; exact response unavailable
Reported error / symptom: Financial News section ends with
Loading...Impact: Visitors can encounter a feed section that does not complete or explain the failure
Reproduction notes
Source-level reproduction inferred from the deterministic request path; no customer-site or local runtime reproduction was performed:
[feedzy-rss]shortcode withlazy='yes'.Loading...container.loadingclass while the original text remains.The customer's exact request status and response are missing, so attribution of that runtime instance remains unverified.
Diagnosis
Conclusion
The lazy frontend failure path is defective in the inspected source. Feedzy initially renders
Loading..., but its client replaces that text only in the AJAX success callback and has no request-error callback. A transport or HTTP failure therefore leaves the original text in place. The report matches this visible outcome, although the customer's failed request and response were not captured.Where this likely occurs
includes/abstract/feedzy-rss-feeds-admin-abstract.php—Feedzy_Rss_Feeds_Admin_Abstract::feedzy_rss()lines 451–491 emitsLoading..., the.feedzy-lazycontainer, request attributes, and REST endpoint data.js/feedzy-lazy.js— lazy-loader IIFE lines 13–50 sends the request; lines 40–45 replace content only on a success callback, while lines 47–49 merely remove the CSS class on completion and no error callback exists.includes/abstract/feedzy-rss-feeds-admin-abstract.php—Feedzy_Rss_Feeds_Admin_Abstract::rest_route()lines 540–557 validates a top-level nonce;Feedzy_Rss_Feeds_Admin_Abstract::feedzy_lazy_load()lines 570–612 can return JSON success, a structured application error, or a raw string from lines 602–605.eda06d1introduced lazy loading and this request structure in 2020, present from tagv3.3.18through inspected tagv5.2.5. Commit5f775ddadded feed-specific nonce handling in 2025 but left transport and unexpected-response paths uncovered. The evidence indicates a long-standing gap rather than a recent regression.Engineering notes
The confirmed defect is limited to the lazy shortcode request lifecycle inspected in the free repository; no corresponding request owner was found in the Pro repository. In addition to transport failures, the success callback assumes an object containing either
data.contentordata.message. The PHP callback's raw-string return path does not match that contract. The precise serialization of route-validation failures depends on WordPress REST behavior, whose source was not present in the plugin checkout and was not treated as locally confirmed.Test coverage status
tests/e2e/specs/import.spec.js—import lazy loading feeds with shortcodelines 57–90 covers a successful request to a known external feed. It does not cover transport or HTTP failures, route validation rejection, malformed or unexpected response shapes, or the raw-string callback path. No relevant Pro coverage was found during inspection.What to verify or explore next
lazy='yes'while forcing the REST request to fail at the network or HTTP layer.tests/e2e/specs/import.spec.jscan be used to compare successful and failed lazy requests.Unknowns / follow-up
The ticket does not contain the customer request URL, HTTP status, response body, browser error, Feedzy version, shortcode attributes, logs, or source feed. It is therefore unknown which specific failure branch produced the reported indicator.
Confidence
Confidence: 88/100
Source inspection confirms that Feedzy's lazy frontend loader can retain its initial
Loading...text after request failures, and no existing GitHub issue was found in targeted searches. The repeated-article symptom remains unconfirmed because the ticket contains no source feed, import counters, logs, or stored-post evidence tying it to product code.Source: HelpScout #3402495948
Generated by bug-report-triage (ID: bug-report-triage_6a6ab037d48ac0.11043558)