Activate WooCommerce, DK Base Plugin, DK AWS SDK, and DK CFR2 Downloads. Open DK Plugins > CFR2 Downloads. Enter the Cloudflare R2 Account ID, Bucket Name, Access Key, and Secret Key. The Region normally uses auto. Use credentials that can read the intended bucket objects.
In the WooCommerce product or variation, enable Downloadable and add a named download. Use a placeholder file URL beginning with the configured R2 Temp URL Prefix (default https://r2/), followed by the object's key: https://r2/books/sample.epub.
The prefix marks files for CFR2; it is not a public bucket URL. The example refers to books/sample.epub inside the configured bucket. Nonmatching file URLs continue through WooCommerce's normal download handling. WooCommerce still controls which purchases receive download permissions.
Expiration Window (hours) controls how long the site's download token remains valid; default 72 hours. Signed URL Lifetime (minutes) controls the temporary R2 URL created when that token is opened; default 15 minutes. These are separate windows.
Max Regenerations per Link defaults to 3. Use 0 for unlimited regenerations, or a positive value to cap regenerations per link.
Send Email on Completion controls automatic CFR2 emails when an order completes. Completing an order still creates or reuses tokens for matching downloads when this option is disabled. Requested replacement emails are separate from this setting.
Changing expiration settings does not rewrite every existing token. Regeneration or an administrative reset gives the affected link a new window. Review the CFR2 email under WooCommerce's email settings when checking delivery.
Open DK Plugins > CFR2 Download Links to see the latest 100 records. Columns include customer email, order, product, token, creation and expiration times, last use, and regeneration count. The clipboard control copies the site's token link.
Use Reset when a customer needs a replacement. It changes the token, renews the expiration, clears use and regeneration history for that record, and invalidates the previous token URL. Copy the replacement link after the reset completes.
DK Plugins > CFR2 Download Logs records token creation, regeneration, expired or invalid attempts, successful redirects, and signer errors. Use its filters to narrow the events. A successful redirect records that the customer was sent to R2; it does not prove that the complete file was received.
The dashboard includes a CFR2 Downloads Summary. Review links and logs together when investigating a customer's order.
Matching WooCommerce download links on My Account, order details, and emails are replaced with site token URLs. Opening a valid token redirects to a temporary signed R2 URL. The Used timestamp tracks use, but the current handler permits repeated use until expiration; these are not enforced single-use links.
Create a WordPress page with the slug regenerate-downloads and place [dk_cfr2_regen_request] in a Shortcode block. Expired links redirect to that fixed page. Customers enter the email recorded against their downloads; eligible expired links are regenerated and emailed within the configured regeneration limit (0 means unlimited). A success message reports how many replacement emails the mailer accepted; blocked regeneration or failed email is reported as an error.
This form emails replacements to the recorded address. It does not require a separate verification-code step. An invalid or reset token displays an invalid-token message instead of identifying an expired record.
Use [dk_cfr2_regen_request] or [dk_cfr2_download_request] for the nonce-protected replacement-link request form. Use [cfr2_downloads] to show the logged-in customer’s WooCommerce downloads; guests receive a login link.
Check that the file begins with the configured prefix, is attached to the purchased downloadable product or variation, and has WooCommerce download permissions. Check the order's product and download identifiers against the link record.
Confirm DK AWS SDK is active and all R2 connection fields are saved. Review the CFR2 logs and server error log for signing errors. Confirm the object key and bucket spelling when R2 refuses the signed request.
Use the email stored in the link record, confirm a record has actually expired, and check its regeneration count. Review WooCommerce email delivery and spam folders. The recovery handler can display a success message even when every record has reached its limit; inspect the records before retrying. An administrator can reset an individual link.
If the recovery page is missing, create it with the exact slug and working shortcode described under Customer Downloads. Clicking a valid link updates Used even if signing subsequently fails, so inspect the corresponding log event.