• Resolved babsrudlin

    (@babsrudlin)


    Download links are no longer working for digital downloads, either from the order confirmation page or inthe emails sent to the customer. I have disabled plugins, tested, and this makes no difference. I have tested for different roles, and it makes no difference. As the original admin, I can access the link, but no other role or user can access. The comments below have been passed back from a level of support, and they advise that I post in this forum for further assistance. The last three links in the data table below do not work; the earlier ones do. The product creation process has not been changed, you can see from the comments that this needs further investigation. The final four orders all have the same prefix, rather than a unique one.

     I can see you’ve done excellent troubleshooting work by checking the downloadable product permissions table, and the data you’ve shared reveals some important clues about what’s happening.
     
    Looking at your database records, I can see that the last few entries (rows 7-8) are using a different download key format and have different order structures compared to the earlier working entries. The key difference is that the problematic downloads are using the uid parameter in URLs instead of the email parameter that works in your successful downloads.

    I have attached the link giving error above in the link to page giving error field. Links that have previously worked are:

    https://babsrudlin.com/?download_file=946&order=wc_order_Wne3safsiq5e5&email=b.pluck6%40gmail.com&key=ad686961-e4a0-4a2b-96d8-73eb68a8089a

    https://babsrudlin.com/?download_file=947&order=wc_order_Wne3safsiq5e5&email=b.pluck6%40gmail.com&key=bbc90626-9f4c-4b2c-a44d-6e3fbc7deba6

    Download Permission table data is below (I have replaced user email details with xxx@xxx.com for privacy)

    permission_iddownload_idproduct_idorder_idorder_keyuser_emailuser_iddownloads_remainingaccess_grantedaccess_expiresdownload_count Edit Copy Delete1bbc90626-9f4c-4b2c-a44d-6e3fbc7deba69471047wc_order_LZeLAVCBdCFVRxxx@xxx.com02026-03-23 00:00:00NULL0 Edit Copy Delete2bbc90626-9f4c-4b2c-a44d-6e3fbc7deba69471050wc_order_w6CjBTgNErfmrxxx@xxx.com02026-03-23 00:00:00NULL0 Edit Copy Delete3ad686961-e4a0-4a2b-96d8-73eb68a8089a9461050wc_order_w6CjBTgNErfmrxxx@xxx.com032026-03-23 00:00:00NULL0 Edit Copy Delete4bbc90626-9f4c-4b2c-a44d-6e3fbc7deba69471051wc_order_eUPxdSw8luIGcxxx@xxx.com02026-03-23 00:00:00NULL0 Edit Copy Delete5bbc90626-9f4c-4b2c-a44d-6e3fbc7deba69471052wc_order_Wne3safsiq5e5xxx@xxx.com02026-03-23 00:00:00NULL2 Edit Copy Delete6ad686961-e4a0-4a2b-96d8-73eb68a8089a9461052wc_order_Wne3safsiq5e5xxx@xxx.com022026-03-23 00:00:00NULL1 Edit Copy Delete71d6ec95a-cce7-4ca2-868a-72f14e29d88f11211165wc_order_2ddeAlNHlXBHtxxx@xxx.com002026-04-05 00:00:002026-05-05 00:00:003 Edit Copy Delete81d6ec95a-cce7-4ca2-868a-72f14e29d88f11211166wc_order_Nn0Dgv9QcOUipxxx@xxx.com032026-04-05 00:00:002026-05-05 00:00:000 Edit Copy Delete91d6ec95a-cce7-4ca2-868a-72f14e29d88f11211165wc_order_2ddeAlNHlXBHtxxx@xxx.com02026-04-06 00:00:002026-05-05 00:00:000 Edit Copy Delete101d6ec95a-cce7-4ca2-868a-72f14e29d88f11211167wc_order_Gzg9Io4U9jmhlxxx@xxx.com22026-04-06 00:00:002026-05-06 00:00:002

    System Status Report:

    WordPress Environment<br><br>WordPress address (URL): https://babsrudlin.com<br>Site address (URL): https://babsrudlin.com<br>WC Version: 10.6.2<br>Legacy REST API Package Version: The Legacy REST API plugin is not installed on this site.<br>Action Scheduler Version: ✔ 3.9.3<br>Log Directory Writable: ✔<br>WP Version: 6.9.4<br>WP Multisite: –<br>WP Memory Limit: 2 GB<br>WP Debug Mode: –<br>WP Cron: ✔<br>WP Environment Type: production<br>Language: en_GB<br>External object cache: – Server Environment<br><br>Server Info: LiteSpeed<br>Server Architecture: Linux 5.14.0-570.62.1.el9_6.x86_64 x86_64<br>PHP Version: 8.3.30<br>PHP Post Max Size: 2 GB<br>PHP Time Limit: 360<br>PHP Max Input Vars: 5000<br>cURL Version: 8.14.1<br>OpenSSL/3.2.2<br><br>SUHOSIN Installed: –<br>MySQL Version: 11.8.6-MariaDB-log<br>Max Upload Size: 2 GB<br>Default Timezone is UTC: ✔<br>fsockopen/cURL: ✔<br>SoapClient: ✔<br>DOMDocument: ✔<br>GZip: ✔<br>Multibyte String: ✔<br>Remote Post: ✔<br>Remote Get: ✔ Database<br><br>WC Database Version: 10.6.2<br>WC Database Prefix: wp_<br>Total Database Size: 28.85MB<br>Database Data Size: 23.41MB<br>Database Index Size: 5.44MB<br>wp_woocommerce_sessions: Data: 0.05MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_api_keys: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_attribute_taxonomies: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_woocommerce_downloadable_product_permissions: Data: 0.02MB + Index: 0.08MB + Engine InnoDB<br>wp_woocommerce_order_items: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_woocommerce_order_itemmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_tax_rates: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_woocommerce_tax_rate_locations: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_shipping_zones: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_woocommerce_shipping_zone_locations: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_shipping_zone_methods: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_woocommerce_payment_tokens: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_woocommerce_payment_tokenmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_woocommerce_log: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_actionscheduler_actions: Data: 1.52MB + Index: 0.89MB + Engine InnoDB<br>wp_actionscheduler_claims: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_actionscheduler_groups: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_actionscheduler_logs: Data: 0.50MB + Index: 0.36MB + Engine InnoDB<br>wp_aioseo_ai_insights_keyword_reports: Data: 0.02MB + Index: 0.05MB + Engine InnoDB<br>wp_aioseo_blc_cache: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_blc_links: Data: 0.05MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_blc_link_status: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_aioseo_blc_notifications: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_aioseo_blc_posts: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_aioseo_cache: Data: 0.17MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_crawl_cleanup_blocked_args: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_crawl_cleanup_logs: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_aioseo_notifications: Data: 1.50MB + Index: 0.06MB + Engine InnoDB<br>wp_aioseo_posts: Data: 0.36MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_seo_analyzer_results: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_aioseo_writing_assistant_keywords: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_aioseo_writing_assistant_posts: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_commentmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_comments: Data: 0.02MB + Index: 0.13MB + Engine InnoDB<br>wp_hostinger_reach_carts: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_hostinger_reach_contact_lists: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_hostinger_reach_forms: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_jetpack_sync_queue: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_links: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_linno_telemetry_queue: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_litespeed_url: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_litespeed_url_file: Data: 0.02MB + Index: 0.08MB + Engine InnoDB<br>wp_mailerlite_forms: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_monsterinsights_cache: Data: 0.02MB + Index: 0.05MB + Engine InnoDB<br>wp_options: Data: 6.42MB + Index: 0.22MB + Engine InnoDB<br>wp_postmeta: Data: 1.52MB + Index: 0.25MB + Engine InnoDB<br>wp_posts: Data: 9.52MB + Index: 0.17MB + Engine InnoDB<br>wp_post_views: Data: 0.11MB + Index: 0.13MB + Engine InnoDB<br>wp_pys_options: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_srfm_entries: Data: 0.02MB + Index: 0.05MB + Engine InnoDB<br>wp_srfm_payments: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_termmeta: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_terms: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_term_relationships: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_term_taxonomy: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_ulike: Data: 0.02MB + Index: 0.19MB + Engine InnoDB<br>wp_ulike_activities: Data: 0.02MB + Index: 0.19MB + Engine InnoDB<br>wp_ulike_comments: Data: 0.02MB + Index: 0.19MB + Engine InnoDB<br>wp_ulike_forums: Data: 0.02MB + Index: 0.19MB + Engine InnoDB<br>wp_ulike_meta: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_usermeta: Data: 0.06MB + Index: 0.03MB + Engine InnoDB<br>wp_users: Data: 0.02MB + Index: 0.05MB + Engine InnoDB<br>wp_wc_admin_notes: Data: 0.06MB + Index: 0.00MB + Engine InnoDB<br>wp_wc_admin_note_actions: Data: 0.06MB + Index: 0.02MB + Engine InnoDB<br>wp_wc_category_lookup: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_wc_customer_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_download_log: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_orders: Data: 0.02MB + Index: 0.13MB + Engine InnoDB<br>wp_wc_orders_meta: Data: 0.05MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_order_addresses: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_wc_order_coupon_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_order_operational_data: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_order_product_lookup: Data: 0.02MB + Index: 0.08MB + Engine InnoDB<br>wp_wc_order_stats: Data: 0.02MB + Index: 0.06MB + Engine InnoDB<br>wp_wc_order_tax_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_product_attributes_lookup: Data: 0.02MB + Index: 0.03MB + Engine InnoDB<br>wp_wc_product_download_directories: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_wc_product_meta_lookup: Data: 0.02MB + Index: 0.11MB + Engine InnoDB<br>wp_wc_rate_limits: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_wc_reserved_stock: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_wc_tax_rate_classes: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_wc_webhooks: Data: 0.02MB + Index: 0.02MB + Engine InnoDB<br>wp_wpfnl_optin_entries: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_wpfnl_stats: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_wpforms_logs: Data: 0.02MB + Index: 0.00MB + Engine InnoDB<br>wp_wpforms_payments: Data: 0.02MB + Index: 0.14MB + Engine InnoDB<br>wp_wpforms_payment_meta: Data: 0.02MB + Index: 0.05MB + Engine InnoDB<br>wp_wpforms_tasks_meta: Data: 0.02MB + Index: 0.00MB + Engine InnoDB Post Type Counts<br><br>attachment: 198<br>custom_css: 2<br>customize_changeset: 2<br>nav_menu_item: 14<br>page: 17<br>post: 38<br>product: 3<br>revision: 328<br>shop_order_placehold: 8<br>sureforms_form: 2<br>wp_global_styles: 3<br>wp_navigation: 1<br>wpfunnel_steps: 7<br>wpfunnels: 2 Security<br><br>Secure connection (HTTPS): ✔<br>Hide errors from visitors: ✔ Active Plugins (16)<br><br>All in One SEO: by All in One SEO Team – 4.9.5.1<br>Copy & Delete Posts: by Inisev – 1.5.3<br>Site Kit by Google: by Google – 1.175.0<br>Hostinger Tools: by Hostinger – 3.0.62<br>LiteSpeed Cache: by LiteSpeed Technologies – 7.8.1<br>Mime Types Plus: by Katsushi Kawamori – 2.05<br>MailerLite - Signup forms (official): by MailerLite – 1.7.20<br>Post Views Counter: by dFactory – 1.7.9<br>SureForms: by SureForms – 2.7.0<br>Spectra: by Brainstorm Force – 3.0.0-beta.2<br>WooCommerce.com Update Manager: by Automattic – 1.0.3<br>WooPayments: by WooCommerce – 10.6.0<br>WooCommerce Tax: by WooCommerce – 3.5.2<br>WooCommerce: by Automattic – 10.6.2<br>WP ULike: by TechnoWich – 5.0.2<br>WPFunnels: by WPFunnels Team – 3.9.7 Inactive Plugins (0) Must Use Plugins (2)<br><br>Hostinger Preview Domain: by Hostinger – 1.3.4<br>Hostinger Smart Auto Updates: by Hostinger – 1.0.7 Settings<br><br>Legacy API Enabled: –<br>Force SSL: –<br>Currency: GBP (£)<br>Currency Position: left<br>Thousand Separator: ,<br>Decimal Separator: .<br>Number of Decimals: 2<br>Taxonomies: Product Types: external (external)<br>grouped (grouped)<br>simple (simple)<br>variable (variable)<br><br>Taxonomies: Product Visibility: exclude-from-catalog (exclude-from-catalog)<br>exclude-from-search (exclude-from-search)<br>featured (featured)<br>outofstock (outofstock)<br>rated-1 (rated-1)<br>rated-2 (rated-2)<br>rated-3 (rated-3)<br>rated-4 (rated-4)<br>rated-5 (rated-5)<br><br>Connected to WooCommerce.com: ✔<br>Enforce Approved Product Download Directories: ✔<br>HPOS feature enabled: ✔<br>Order datastore: Automattic\WooCommerce\Internal\DataStores\Orders\OrdersTableDataStore<br>HPOS data sync enabled: –<br>Enabled Features: analytics<br>marketplace<br>order_attribution<br>site_visibility_badge<br>remote_logging<br>email_improvements<br>blueprint<br>point_of_sale<br>custom_order_tables Logging<br><br>Enabled: ✔<br>Handler: Automattic\WooCommerce\Internal\Admin\Logging\LogHandlerFileV2<br>Retention period: 30 days<br>Level threshold: –<br>Log directory size: 49 KB WC Pages<br><br>Shop base: #940 - /shop/<br>Basket: #941 - /basket/ - Contains the &#091;woocommerce_cart] shortcode<br>Checkout: #942 - /checkout/ - Contains the &#091;woocommerce_checkout] shortcode<br>My account: #943 - /my-account/ - Contains the &#091;woocommerce_my_account] shortcode<br>Terms and conditions: #944 - /refund_returns/ Theme<br><br>Name: Astra<br>Version: 4.12.6<br>Author URL: https://wpastra.com/about/?utm_source=theme_preview&utm_medium=author_link&utm_campaign=astra_theme<br>Child Theme: ❌ – If you are modifying WooCommerce on a parent theme that you did not build<br>personally we recommend using a child theme. See: How to create a child theme<br><br>Theme type: Classic theme<br>WooCommerce Support: ✔ Templates<br><br>Overrides: – WooPayments<br><br>Version: 10.6.0<br>Connected to WPCOM: Yes<br>WPCOM Blog ID: 253520247<br>Account ID: acct_1TCj1GFnvAG2wH4c<br>Payment Gateway: Enabled<br>Test Mode: Disabled<br>Enabled APMs: card,afterpay_clearpay,klarna<br>WooPay: Not eligible<br>Apple Pay / Google Pay: Enabled (product,cart,checkout)<br>Fraud Protection Level: basic<br>Multi-currency: Enabled<br>Auth and Capture: Disabled<br>Support Phone: +447818486027<br>Documents: Enabled<br>Logging: Disabled Admin<br><br>Enabled Features: activity-panels<br>analytics<br>analytics-scheduled-import<br>product-block-editor<br>experimental-iapi-mini-cart<br>coupons<br>core-profiler<br>customize-store<br>customer-effort-score-tracks<br>import-products-task<br>experimental-fashion-sample-products<br>shipping-smart-defaults<br>shipping-setting-tour<br>homescreen<br>marketing<br>mobile-app-banner<br>onboarding<br>onboarding-tasks<br>pattern-toolkit-full-composability<br>product-custom-fields<br>remote-inbox-notifications<br>remote-free-extensions<br>payment-gateway-suggestions<br>printful<br>shipping-label-banner<br>subscriptions<br>store-alerts<br>transient-notices<br>woo-mobile-welcome<br>wc-pay-promotion<br>wc-pay-welcome-page<br>launch-your-store<br><br>Disabled Features: product-data-views<br>experimental-blocks<br>experimental-iapi-runtime<br>coming-soon-newsletter-template<br>minified-js<br>product-pre-publish-modal<br>products-catalog-api<br>settings<br>async-product-editor-category-field<br>product-editor-template-system<br>use-wp-horizon<br>rest-api-v4<br><br>Daily Cron: ❌ Not scheduled<br>Options: ✔<br>Notes: 51<br>Onboarding: completed Action Scheduler<br><br>Canceled: 1<br>Oldest: 2026-04-06 08:45:30 +0000<br>Newest: 2026-04-06 08:45:30 +0000<br><br>Complete: 2,137<br>Oldest: 2026-03-06 17:42:21 +0000<br>Newest: 2026-04-06 16:51:49 +0000<br><br>Failed: 35<br>Oldest: 2026-02-10 11:52:50 +0000<br>Newest: 2026-03-20 15:36:01 +0000<br><br>Pending: 25<br>Oldest: 2026-04-06 17:23:02 +0000<br>Newest: 2026-05-02 19:41:33 +0000 Status report information<br><br>Generated at: 2026-04-06 17:06:40 +00:00<br>

    The page I need help with: [log in to see the link]

Viewing 15 replies - 1 through 15 (of 15 total)
  • Plugin Support Frank Remmy (woo-hc)

    (@frankremmy)

    Hi @babsrudlin,

    Thanks for providing the permissions table and sharing your system report. That’s really helpful and gives us a clear picture of what’s going on.

    Looking at your data, there are actually two separate issues at play:

    1. Download limit reached (row 7, order wc_order_2ddeAlNHlXBHt): The permissions record for this customer shows downloads_remaining = 0 and download_count = 3, meaning they’ve already used all their permitted downloads. That’s why you’re seeing “Sorry, you have reached your download limit.” This isn’t a bug; the customer has simply exhausted their allowance. You can go into WooCommerce → Orders → [that order] → Downloadable product permissions and increase the download limit manually for that customer if needed.
    2. “Invalid download link” (row 10, order wc_order_Gzg9Io4U9jmhl): This one is more interesting. The permission record looks valid, downloads_remaining = 2, not expired, and the key matches. However, your store has HPOS enabled, but HPOS data sync is disabled. This means your orders live in the new HPOS tables, but WooCommerce’s download validation may be failing to locate the order when verifying the link, resulting in an “invalid” error despite the permission being there.

    To fix this, please try the following:

    1. Go to WooCommerce → Settings → Advanced → Features and enable “Sync the new order tables with WooCommerce’s order storage system” (HPOS data sync). This ensures both storage systems are in agreement.
    2. After enabling sync, flush your LiteSpeed Cache completely.
    3. Ask the customer to try their download link again.

    One more thing, your Daily Cron is showing as not scheduled. That can affect background processes including download-related tasks. Please go to WooCommerce → Status → Scheduled Actions and check whether things are running normally, or reach out to Hostinger to confirm WP-Cron is functioning correctly on your hosting plan.

    Let us know how it goes after enabling HPOS sync!

    Thread Starter babsrudlin

    (@babsrudlin)

    Thanks for your suggestions.

    Issue 1 – I understand the limits and this is not causing an error.

    Issue 2 – I have enabled HPOS data syns, run the sync and flushed the cache. No change, link gives same error.

    There are over 1000 cron jobs that have run, although a selection are failing. The cron jobs failing are:

    Select allHookSort descending.StatusArgumentsGroupSort descending.RecurrenceScheduled DateSort descending.LogClaim IDSort descending.hostinger-reach/jobs/cleanup_carts/startFailedhostinger-reachEvery 1 day2026-03-11 22:03:47 +0000
    (3 weeks 5 days ago)

    1. 2026-03-10 22:03:47 +0000
      action created
    2. 2026-03-11 22:04:33 +0000
      action started via WP Cron
    3. 2026-03-11 22:04:33 +0000
      action failed via WP Cron: Scheduled action for hostinger-reach/jobs/cleanup_carts/start will not be executed as no callbacks are registered.

    8424hostinger-reach/jobs/cleanup_carts/startFailedhostinger-reachEvery 1 day2026-03-12 22:04:33 +0000
    (3 weeks 4 days ago)

    1. 2026-03-11 22:04:33 +0000
      action created
    2. 2026-03-12 22:09:00 +0000
      action started via WP Cron
    3. 2026-03-12 22:09:00 +0000
      action failed via WP Cron: Scheduled action for hostinger-reach/jobs/cleanup_carts/start will not be executed as no callbacks are registered.
    4. 2026-03-12 22:09:00 +0000
      This action appears to be consistently failing. A new instance will not be scheduled.

    8750wpfunnels_schedule_pending_batch_processesFailedwpfunnels_batch_processesNon-repeating2026-03-19 08:25:51 +0000
    (2 weeks 4 days ago)

    1. 2026-03-19 08:25:51 +0000
      action created
    2. 2026-03-19 08:26:10 +0000
      action started via WP Cron
    3. 2026-03-19 08:26:10 +0000
      action failed via WP Cron: Scheduled action for wpfunnels_schedule_pending_batch_processes will not be executed as no callbacks are registered.

    10447action_scheduler/migration_hookFailedaction-scheduler-migrationNon-repeating2026-03-19 08:43:00 +0000
    (2 weeks 4 days ago)

    1. 2026-03-19 08:42:00 +0000
      action created
    2. 2026-03-19 08:43:08 +0000
      action started via WP Cron
    3. 2026-03-19 08:43:08 +0000
      action failed via WP Cron: Scheduled action for action_scheduler/migration_hook will not be executed as no callbacks are registered.

    10468woocommerce_admin/stored_state_setup_for_products/async/run_remote_notificationsFailedNon-repeatingasync

    1. 2026-03-20 15:35:47 +0000
      action created
    2. 2026-03-20 15:36:01 +0000
      action started via WP Cron
    3. 2026-03-20 15:36:01 +0000
      action failed via WP Cron: Scheduled action for woocommerce_admin/stored_state_setup_for_products/async/run_remote_notifications will not be executed as no callbacks are registered.
    Thread Starter babsrudlin

    (@babsrudlin)

    I also created a new order, and the issue still persists.

    Plugin Support LovingBro (woo-hc)

    (@lovingbro)

    Hi @babsrudlin,

    Thank you for the detailed follow-up and for taking the time to test this further, I can see the effort you’ve put into isolating the issue, especially with enabling HPOS sync, running it, and testing with a fresh order. Since the issue persists even after that, we’ll want to dig a bit deeper into what could be preventing WooCommerce from validating those download links correctly.

    From what you’ve shared, the permission record itself looks valid, so the “invalid download link” error is likely happening during the validation step, rather than from missing permissions. Given that, here are a few targeted checks that can help narrow this down further:

    1. Download method setting: Please check under WooCommerce → Settings → Products → Downloadable products what the “File download method” is set to. Try switching temporarily to “Force downloads” or “X-Accel-Redirect/X-Sendfile” (depending on your server support) and test again. Guide: https://woocommerce.com/document/digital-downloadable-product-handling/
    2. Permalink structure: Go to Settings → Permalinks and simply click Save Changes to flush rewrite rules. This can resolve issues where download endpoints are not being correctly interpreted.
    3. Order key consistency: You mentioned newer orders sharing similar prefixes, and your earlier observation about uid vs email is important. WooCommerce should consistently generate valid download URLs, so this change could indicate something filtering or modifying link generation. Could you confirm if you have any custom code, snippets, or plugins that modify download permissions or order handling?
    4. Caching or security layer: Even after clearing LiteSpeed cache, it’s worth checking if there is any server level caching, firewall, or security rule (for example via Hostinger or mod_security) that might be blocking or altering query parameters like key, order, or email.
    5. Action Scheduler failures: Those failed cron jobs you shared are helpful. While they may not directly cause this issue, they do indicate that some scheduled hooks are missing callbacks, which can happen when plugins are updated or partially removed.
      To rule out any side effects:
      – Temporarily deactivate Hostinger Tools and WPFunnels
      – Run another test order and download
    6. Regenerate download permissions
      For one affected order, try:
      – Edit the order
      – Remove the downloadable permissions
      – Re-add them manually using the “Downloadable product permissions” section
      Then test the newly generated link

    If the issue still persists after these checks, the next step would be to capture a bit more detail from your setup. Could you share:
    – A fresh System Status Report via https://pastebin.com
    – A screenshot of the WooCommerce → Settings → Products → Downloadable products section via https://snipboard.io

    That will help us pinpoint whether this is coming from configuration, environment, or something intercepting the download validation. Looking forward to your findings, we’ll get to the bottom of this with you.

    Thread Starter babsrudlin

    (@babsrudlin)

    I have tested with all suggestions above, and cleared the server-side cache. no changes. The download link errors remain.

    I have, however, created a new link to a PDF product, and this works as expected. Could the file type of .epub be a potential issue?

    system status data is at https://pastebin.com/Zhf4Uigz, image of product settings at: https://snipboard.io/anNM8R.jpg

    Plugin Support LovingBro (woo-hc)

    (@lovingbro)

    Hi @babsrudlin,

    Thank you for continuing to test this so thoroughly, I can see the effort you’ve put into isolating the issue, especially with confirming that a newly created PDF works correctly. That detail is very helpful and points us in a clearer direction.

    Based on that, your observation about the .epub file type is very likely relevant here. By default, WooCommerce relies on allowed file types and proper MIME handling for downloadable products. If the server or WordPress does not correctly recognize the .epub MIME type, it can cause the validation step to fail, which may surface as an “invalid download link” even when the permission record itself is valid.

    Here are a few targeted checks to help confirm and resolve this:

    1. Verify EPUB MIME type support
    Ensure .epub is allowed on your site. Since you are using the “Mime Types Plus” plugin, please confirm that the following is explicitly added:
    epub = application/epub+zip

    2. Test with a different download method
    Under WooCommerce → Settings → Products → Downloadable products, switch the file download method to Force downloads and test again. This bypasses some server level handling that may interfere with certain file types.
    Guide: https://woocommerce.com/document/digital-downloadable-product-handling/

    3. Direct file accessibility check
    Try accessing the .epub file directly via its URL (outside of WooCommerce). If the file does not download or triggers a server error, that would confirm a server level restriction or MIME issue.

    4. Server or security layer restrictions
    Since you are on Hostinger with LiteSpeed, it is worth confirming with your host that .epub files are not being blocked or filtered by server rules or mod_security.

    Given that PDFs work and EPUB does not, this strongly suggests the issue is not with permissions or HPOS anymore, but specifically how that file type is being handled during download validation.

    Thread Starter babsrudlin

    (@babsrudlin)

    I have made changes to the .htaccess to ensure .epub files can be processed. All caches have been purged, and I have re-uploaded the product to WooCommerce. I have cleared the cache and used the forced download method. Regenerated a new product link, rebuilt the permalinks, and still getting the same error for .epub files. The server error returned is:

    026-04-07
    16:07:50
    404
    2a00:23c8:b5e0:fb01:6520:f7d9:5d52:f330
    GET /?download_file=1121&order=wc_order_rxcoFZ2kSsTRf&email=robsgaming12345%40gmail.com&key=1d6ec95a-cce7-4ca2-868a-72f14e29d88f HTTP/2
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36
    United Kingdom
    1229
    193

    The hostinger advice is “Your logs show the download URL is hitting the site but returning 404 every time, so the problem is WooCommerce/file access, not a site outage.”

    To confirm the file link still works for me as the first admin user, so the file does exist in this location, it is not accessible to anyone else.

    Plugin Support LovingBro (woo-hc)

    (@lovingbro)

    Hi @babsrudlin,

    Thank you for the detailed update and for continuing to test this so thoroughly, I can see the effort you’ve put into checking the .htaccess changes, regenerating links, and confirming the 404 response from the server. That helps narrow things down quite a bit.

    At this point, the key detail is that the request is returning a 404 specifically for non-admin users, while the file is still accessible for you as the admin. Combined with the fact that PDFs work and EPUB does not, this strongly suggests the issue is not with WooCommerce permissions anymore, but with how the file is being resolved or served at the server level during validation.

    A few focused checks that should help pinpoint this further:

    1. File path and storage location: Please confirm where the .epub file is stored. If it is outside the standard WordPress uploads directory or in a protected directory, LiteSpeed or server rules may block access for non-authenticated requests. WooCommerce expects files to be accessible via its controlled method, and restrictions here can trigger a 404.
    2. Check LiteSpeed or server-level rules: Since you are using LiteSpeed, there may be rules blocking certain file extensions like .epub. Even if .htaccess was updated, LiteSpeed can override this. It would be worth asking Hostinger to explicitly confirm that .epub is allowed and not restricted by LiteSpeed or mod_security rules.
    3. Test direct file URL (important): Try opening the direct URL to the .epub file (not the WooCommerce download link).
      – If this also returns 404 for non-admin users, then the issue is definitely server-level access restriction
      – If it works, then the issue is happening during WooCommerce’s download handling
    4. Try “Redirect only” download method: In WooCommerce → Settings → Products → Downloadable products, switch to Redirect only and test again. This avoids PHP-based handling and can help confirm whether the issue is with WooCommerce validation or server delivery.
      Guide: https://woocommerce.com/document/digital-downloadable-product-handling/
    5. Check file name and characters: Ensure the .epub file name does not contain special characters, spaces, or uppercase inconsistencies, as this can sometimes cause mismatches on case-sensitive servers.

    Given everything you’ve tested so far, this is now pointing strongly toward a server level restriction or file handling issue specific to .epub rather than WooCommerce itself.

    If possible, you could also ask Hostinger to check why requests to that specific file type via query parameters are returning 404 while others are not, that will likely reveal the exact rule causing this.

    Let me know what you find from the direct file access test, that will help confirm the exact direction to take next.

    Thread Starter babsrudlin

    (@babsrudlin)

    Thank you so much for the pongoing assistnace.

    1 – The file is within the woo commerce upload directory.

    2 – checked Lite speed, disabled completely and there are no rules impacting the files for woo commerce.

    3 – I get a 403 error. Forbidden access to this resource on the server is denied when attempting to access the file directly from icognito.

    4 – I have tried every download method available and none change the outcome.

    5 – no special characters in the file name.

    I have asked Hosinger, and after searching a variety of raw data files, I found no redirects, code snippets, or other redirect instructions.

    Thread Starter babsrudlin

    (@babsrudlin)

    I created a duplicate product with a link outside of WooCommerce. The Woo Commerce-generated link for download continues to fail. However, in an incognito window, the root file outside the woocommerce file structure is accessible.

    generated link that fails: https://babsrudlin.com/?download_file=1172&order=wc_order_rxcoFZ2kSsTRf&email=robsgaming12345%40gmail.com&key=0c633c38-bdec-4106-ba19-7217c071c302

    root link that works: https://babsrudlin.com/wp-content/uploads/2026/04/Weavers-Gambit-The-Babs-Rudlin.epub

    Plugin Support Shameem – a11n

    (@shameemreza)

    Hi @babsrudlin

    Two days of troubleshooting and systematically ruling things out is no small effort. The detail about admin being able to download while everyone else gets a 404 is what cracks this open.

    The issue is the Approved Download Directories feature. Your system status report shows it as enabled (Enforce Approved Product Download Directories: ✔).

    Every time someone clicks a download link, WooCommerce checks whether the file sits inside an approved directory. If the directory isn’t approved or is disabled in the list, admin users get a free pass because WooCommerce silently auto-approves the directory for anyone with admin-level access. Regular customers don’t get that pass. The download is flagged as invalid, and they see a 404.

    That explains every symptom: admin works, customers don’t, PDFs work (their directory is approved), EPUBs don’t (their directory likely isn’t), and deactivating plugins changes nothing because this is core WooCommerce behavior.

    Can you please try this to confirm:

    • Go to WooCommerce > Settings > Products > Approved download directories (or go directly to wp-admin/admin.php?page=wc-settings&tab=products&section=downloadable and look for the Approved Download Directories link)
    • Click “Stop Enforcing Rules” temporarily: https://cln.sh/T13LWyrj
    • Test the EPUB download link in an incognito window or as a non-admin user.

    If the download works with enforcement turned off, that confirms the cause. To fix it properly, turn enforcement back on, open the list of approved directories, and add or enable the parent directory that matches your EPUB file URL (the folder path shown in the product’s downloadable file settings).

    If you have database access or can ask Hostinger to run this quick query, it’ll show you exactly what’s in the approved list:

    SELECT * FROM wp_wc_product_download_directories;

    Compare those URLs against the file URL in your EPUB product’s download settings. You’re looking for a missing entry or one with enabled = 0.

    Let me know how it goes.

    Thread Starter babsrudlin

    (@babsrudlin)

    Hi there,

    Thanks for the reply. Unfortunately, the product’s download directory is already included in the approved directory listing. I have also tested by revoking the enforce rule, and nothing has altered. The files are still showing the same error.

    Plugin Support shahzeen(woo-hc)

    (@shahzeenfarooq)

    Hi there!

    Thank you for providing more information about the issue. I have tried to replicate that issue on my site but I’m not able to replicate that issue. By defualt wordpress does not allow to uplaod .epub file and I can see you are using Mime type plugin whcih might allowed to uplaod that file.

    For testing puropse coudl uypleae deactivate the plugin you are using to allow upload that file. After that delete the file form the wordpress media if exist. Then add a following code in function.oho file in child thmee or used the code snippet plugin to add thaat cose.

    function add_custom_mime_types($mimes){
    $mimes['epub'] = 'application/epub+zip';
    return $mimes;
    }
    add_filter('upload_mimes', 'add_custom_mime_types');

    This code will allow you to upload .epub files once it has been added.

    After that, please create a new product, set it as Virtual and Downloadable, and then upload the file using the “Choose file” option that appears when the product is marked as downloadable.

    Once done, please place a test order and check if the issue still occurs.

    For reference, here is a test product I created using the file you shared, and it’s working correctly on my end:
    https://shahzeen-testing.mystagingwebsite.com/product/downloadable-product-test/

    Note: The file has been added for testing purposes to demonstrate that it’s working correctly on my end. I will remove it from my site once you have completed your testing.

    Based on this, I suspect that the plugin you’re using to allow .epub uploads may be causing the issue.

    If you continue to experience the problem, please set the price of the newly created product to 0. This will allow me to place a test order on your site and try to replicate the issue.

    Thread Starter babsrudlin

    (@babsrudlin)

    Thank you! I created the child theme, added the code snippet, and deactivated/uninstalled the mime types plugin. The new product uploaded smoothly and was immediately available from the order confirmation page. This had not worked previously.

    The code you provided didn’t work – however, I used the function below, and now all is as expected.

    add_filter(‘upload_mimes’, function ( $mimes = array() )
    {
    $mimes[‘mobi’] = ‘application/x-mobipocket-ebook’;
    $mimes[‘epub’] = ‘application/epub+zip’;
    return $mimes;
    } );

    thank you so much!

    Plugin Support LovingBro (woo-hc)

    (@lovingbro)

    Hi @babsrudlin,

    Great to hear that got it working, and thanks for sharing the snippet that did the trick.

    I’m glad we were able to help point you in the right direction on this one. Also, thank you for taking the time to test thoroughly and come back with what worked — that will be helpful for others who run into something similar.

    Since this is now resolved, if you have a moment, we’d really appreciate a review of WooCommerce here: https://wordpress.org/support/plugin/woocommerce/reviews/#new-post. Your feedback can help other merchants too.

    Thanks again for sticking with the troubleshooting.

Viewing 15 replies - 1 through 15 (of 15 total)

You must be logged in to reply to this topic.