Dude Downloads Documentation
Sell digital downloads with Stripe Checkout.
Lightweight WordPress plugin for selling PDFs, ZIP files, software, licences and other digital products directly from your website.
Dude Downloads — User Guide
This guide is for site owners and administrators who sell or give away digital files with Dude Downloads. It explains setup, products, checkout, and day-to-day use.
For developer topics (REST API, hooks, architecture), see the documentation index.
What Dude Downloads does
Dude Downloads lets you:
- Offer free downloads (visitor enters email, receives a secure link).
- Sell paid downloads via Stripe Checkout (payment happens on Stripe’s pages, not inside WordPress).
- Deliver files through expiring, limited-use download links and email notifications.
- Embed products on any page with a block or shortcode.
You do not need WooCommerce. There is no shopping cart—each product is a single checkout or free claim.
Requirements
| Requirement | Minimum |
|---|---|
| WordPress | 6.5+ (6.6+ recommended) |
| PHP | 8.1+ |
| Stripe account | Required for paid products |
| HTTPS | Strongly recommended for live payments |
Paid checkouts use Stripe Checkout only. Card data is never stored on your WordPress site.
Installation
- Install Dude Downloads from the WordPress plugin directory, or upload the plugin ZIP under Plugins → Add New → Upload Plugin.
- Activate the plugin.
- In the admin sidebar, open Dude Downloads.
On first use you may see a Freemius opt-in screen. You can skip it—the free plugin works without a licence. A Pro licence (purchased separately) unlocks advanced features described below.
Quick start (about five minutes)
- Connect Stripe — Dude Downloads → Settings. Add your Stripe test publishable and secret keys, leave Test mode enabled, and click Save and test Stripe connection. See Connecting Stripe.
- Create a product — Dude Downloads → Products → Add New. Set a title, choose Free download or Paid download, attach a file, set a price (paid only), and Publish.
- Place the product on a page — Copy the shortcode from the product screen, e.g.
[dude_download id="123"], or insert the Digital Download block and pick the product. - Test — Visit the page. For a paid product, use Stripe test card
4242 4242 4242 4242with any future expiry and CVC.
Admin menu overview
| Screen | Purpose |
|---|---|
| Dude Downloads (home) | Shortcuts to products and settings |
| Products | Create and edit download products |
| Transactions | Sales and free claims; open a row for details |
| Settings | Stripe keys, webhooks, currency, logging, uninstall |
| Tools | Outgoing webhook test and delivery log (Pro) |
| System Status | Environment checks when troubleshooting |
Users who can edit posts can manage products. Settings, Transactions, and Tools require an administrator (manage_options).
Connecting Stripe
Dude Downloads uses manual API keys from your Stripe Dashboard. One-click “Connect with Stripe” may be added in a future release.
Test mode (recommended first)
- In Stripe Dashboard, enable Test mode (toggle in the dashboard).
- Go to Developers → API keys and copy the Publishable key and Secret key (test).
- In WordPress, open Dude Downloads → Settings.
- Enable Use Stripe test keys (Test mode).
- Paste keys into Test publishable key and Test secret key.
- Click Save and test Stripe connection. You should see a success message.
Webhook endpoint (live sites and reliable local testing)
Stripe notifies WordPress when a payment succeeds. The plugin shows your webhook URL on the Settings screen:
https://YOUR-SITE/wp-json/dude-downloads/v1/stripe/webhook
On a public live site:
- In Stripe: Developers → Webhooks → Add endpoint.
- Paste the URL above.
- Subscribe to at least:
checkout.session.completedcheckout.session.async_payment_succeededcheckout.session.async_payment_failedcheckout.session.expiredcharge.refunded
- Copy the Signing secret (
whsec_…) into Test webhook secret or Live webhook secret in plugin settings (matching test vs live mode).
On Local WP or other offline dev sites: Stripe cannot reach your machine. Either use the Stripe CLI to forward events to the webhook URL, or use Allow “Confirm payment” without webhooks (test mode only)—see Troubleshooting.
Going live
- Complete Stripe account activation and switch the Dashboard to Live mode.
- In plugin settings, disable Test mode and enter Live publishable, secret, and webhook signing secrets.
- Disable Allow “Confirm payment” without webhooks—live sites must rely on webhooks (or async payment flows Stripe supports).
- Run a real small-value purchase to confirm email and download delivery.
More detail: stripe-setup.md.
Creating products
Open Dude Downloads → Products → Add New.
Product title
The title is shown on the front end when you use the default layout (title visible). It is also used in emails and transaction records.
Product type
| Type | Visitor experience |
|---|---|
| Paid download | Sees price and Buy now (or your button label). Clicks through to Stripe Checkout, then receives download access. |
| Free download | Enters email (name optional), submits, receives download access without payment. |
Both free and paid products are unlimited on the free plugin plan.
Description
Optional plain text shown under the title on the product embed. Good for a short pitch or file format notes.
Price and currency (paid only)
Enter the price in major units (e.g. 19.99). Currency defaults from Settings → Default currency but can be overridden per product (ISO code, e.g. gbp, usd).
Button label
Customize the call-to-action (defaults: Buy now / Download now).
Downloadable file
Click Select file to choose a file from the Media Library. The file is delivered through secure links, not as a direct public media URL.
Download expiry and limit (Free vs Pro)
On the free plan, each customer link:
- Expires after 7 days
- Allows up to 5 download attempts
Pro lets you set custom expiry and limits per product.
Success / thank-you message
Shown on the page after a successful paid checkout (or on the return UI). If empty, a default thank-you message is used.
Administrator notifications
Optional checkbox to email the site administrator when someone completes a free download or paid purchase.
Shortcode
Each product shows its embed code, e.g. [dude_download id="42"]. The product must be Published for visitors to see it (editors can preview unpublished products).
Legacy products
Older tip or fixed price products may still appear in the list with a warning. They cannot accept new checkouts. Create a new free or paid download product instead.
Showing products on your site
Block editor
- Edit a page or post.
- Add block Digital Download (category: Widgets).
- Choose the product in the block sidebar.
- Optional: toggle title/description, custom button text, or compact layout.
Shortcode
[dude_download id="123"]
| Attribute | Default | Description |
|---|---|---|
id | — | Required. Product post ID. |
show_title | yes | Show product title (yes / no). |
show_description | yes | Show description (yes / no). |
button_text | (from product) | Override button label. |
layout | default | default or compact. |
Legacy shortcodes (still supported): [wpdude_download], [simple_product].
Place the shortcode or block on the same page you use as the Stripe return URL when possible—the thank-you and download button appear inline after checkout.
What your customers experience
Free download
- Visitor enters email (and optionally name) and submits.
- They see a success message and download link on the page.
- They receive an email with the download link (if WordPress mail is configured).
Paid download
- Visitor clicks your buy button.
- They are redirected to Stripe Checkout to pay.
- After payment, Stripe returns them to your site with a success URL.
- They see your thank-you message and Download your file when the payment is confirmed.
- They receive a download email.
If payment confirmation is still pending (common for a few seconds until Stripe’s webhook runs), the page shows “Your payment is being confirmed…” and updates when complete.
Cancelled checkout
If the customer abandons Stripe Checkout, they return with a message that no payment was taken.
Download links
Links are tied to the transaction, expire after the configured period, and count toward the download limit. They are not meant to be shared indefinitely—customers should use the link from their email or success page.
Transactions
Dude Downloads → Transactions lists every free claim and paid order.
- Filter by status, product type, product ID, or date range.
- Click a date to open the detail view (customer, amounts, Stripe IDs, download count).
Transaction statuses
| Status | Meaning |
|---|---|
pending | Checkout started; payment not yet confirmed |
completed | Paid and fulfilled (download access granted) |
free | Free download completed |
failed | Payment failed |
expired | Checkout session expired without payment |
refunded / partially_refunded | Refund recorded from Stripe |
Pro: Export CSV on the transactions screen exports the current filter (up to thousands of rows) for accounting or CRM import.
Settings reference
Stripe
- Test mode — Use test API keys and test webhooks.
- Allow “Confirm payment” without webhooks — Test mode only; shows Confirm payment (local test) on the success page. Do not use on production.
- Default currency — Default for new paid products.
- Webhook endpoint — Copy into Stripe Dashboard.
- API keys / webhook secrets — Leave a field blank when saving to keep the existing stored value (fields show masked placeholders).
Outgoing webhooks (Pro)
Send signed JSON events to automation tools (Make, n8n, Zapier, custom URL). Configure the URL and events here; use Tools to send a test and view delivery logs. See webhooks.md.
General
- Log level / Log retention — Plugin diagnostic logging (helpful when support asks for details).
- Delete all plugin data when the plugin is uninstalled — When enabled, removing the plugin deletes products metadata, transactions, and settings. Use with care.
Dude Downloads Pro
Pro is a separate package licensed through Freemius. The free plugin includes unlimited free and paid download products, Stripe Checkout, emails, the block, shortcode, and the transactions list.
Pro adds:
| Feature | Benefit |
|---|---|
| Custom download expiry and limits | Control how long links work and how many times they can be used |
| Custom customer email subject/body | Per-product templates with placeholders |
| Custom success redirect URL | Send buyers to a custom thank-you page after payment |
| Outgoing webhooks | Automate CRM, email tools, or internal systems |
| CSV export | Export transactions for reporting |
| Admin REST API | Integrate with external admin tools |
Activate Pro from Dude Downloads → Account (Freemius) after purchase.
Email delivery
Download and notification emails are sent with WordPress’s wp_mail(). If customers do not receive mail:
- Install and configure an SMTP plugin (common on shared hosting).
- Check spam folders.
- Confirm Settings → General site email is valid.
- On local dev, use an mail catcher (e.g. Mailhog) or an SMTP relay.
Troubleshooting
“Connected to Stripe” fails
- Confirm you copied the full secret key (
sk_test_…orsk_live_…). - Ensure test vs live keys match the Test mode checkbox.
- Check PHP can make outbound HTTPS requests (firewall, hosting restrictions).
Payment succeeded in Stripe but order stays pending
- Webhook not configured or wrong signing secret.
- Webhook URL must be publicly reachable (not
localhostwithout CLI forwarding). - On local dev with test mode: enable Confirm payment without webhooks and click Confirm payment (local test) on the success page.
Download button never appears
- Wait for webhook processing (refresh after a few seconds).
- Open Transactions and confirm status is
completedorfree. - Ensure the product has a file attached.
Product does not show on the front end
- Product must be Published.
- Shortcode
idmust match the product ID. - Legacy product types do not render for visitors.
Need technical details for support
Open Dude Downloads → System Status and note any Warning or Fail rows. Share your WordPress version, PHP version, and whether you use test or live mode—avoid pasting secret keys.
Privacy and external services
- Stripe processes payments under Stripe’s terms and privacy policy.
- Freemius (optional opt-in / licensing) may collect usage data per their policy when you connect an account.
- Customer email addresses are stored with transactions for fulfilment and admin visibility.
Frequently asked questions
Do I need WooCommerce?
No. Dude Downloads is standalone.
Can I sell multiple files in one product?
Each product delivers one selected file. Use separate products or bundle files into a ZIP.
Can I change the price after someone bought?
Existing transactions keep the amount paid. New checkouts use the current price.
Does it work with page builders?
Use the shortcode in an HTML or shortcode widget, or a block-compatible area. After checkout, return URLs work best when the product embed is on the return page.
Where is card data stored?
On Stripe’s servers only, not in WordPress.

