LucrativeIt Digital Download and Licensing

Installation, configuration, and user guide for store owners

Introduction

LucrativeIt Digital Download and Licensing is a standalone WordPress plugin for selling digital products such as eBooks, templates, themes, and plugins. It supports lifetime, monthly, and yearly licenses, and takes payment through Stripe or Paddle.

After a successful payment, the plugin issues a license key, emails the customer a secure download link that expires, and blocks downloads once a subscription lapses. Card details are entered on Stripe or Paddle's hosted checkout, so they never touch your WordPress server. WooCommerce is not required.

Quick start: Install and activate the plugin, choose Stripe or Paddle under Digital Licensing → Settings → Payments, paste your API keys and add the webhook, configure SMTP, then create your first product with Add Product. The shop, cart, checkout, and account pages are created for you automatically.

Key features

  • Lifetime (one-time), yearly, and monthly billing plans on the same product
  • Automatic license key generation and expiry tracking
  • Private file vault: product files are never stored in the public Media Library
  • Signed, time-limited download links
  • Stripe Checkout or Paddle Billing, with webhook-verified fulfilment
  • Coupons with percentage or fixed discounts, usage limits, and minimum order amounts
  • Product categories, tags, and Featured / Popular / Trendy showcases
  • Full block editor (Gutenberg) or Elementor for product descriptions
  • Customer account area with orders, downloads, and profile
  • Optional emails to existing buyers when you release a new product version
  • Built-in SMTP and an editable license delivery email

System Requirements

RequirementDetails
WordPress6.0 or higher (tested up to 7.1)
PHP7.4 or higher
HTTPSRequired in production so Stripe and Paddle can deliver webhooks
Payment accountA Stripe or Paddle account (test/sandbox mode works for setup)
PermalinksAny setting other than "Plain" so the REST webhook URLs resolve
Upload sizeProduct files up to 64 MB through the uploader (limited by your PHP upload_max_filesize and post_max_size)
EmailAn SMTP provider is recommended so license emails reach customers reliably

Installation

Installation takes a few minutes and does not need SSH access.

  1. Upload the plugin

    In WordPress, go to Plugins → Add New → Upload Plugin, choose the plugin ZIP file, and click Install Now.

    You can also extract the ZIP and upload the lucrativeit-digital-download-and-licensing folder to /wp-content/plugins/ over FTP.

  2. Activate

    Click Activate Plugin. A new Digital Licensing menu appears in the admin sidebar.

    On activation the plugin creates four storefront pages: Digital Shop, My Cart, Digital Checkout, and My Digital Account. It also adds sample products so you can see how the store looks. Delete or replace them when you start selling.

  3. Connect a payment gateway

    Open Digital Licensing → Settings → Payments, choose Stripe or Paddle, enter your keys, and create the webhook endpoint as described in Payments & Webhooks.

  4. Create your first product

    Click + Add Product and follow the four-step wizard: Details, Pricing, Product details, and File & Publish.

Post-Installation Checklist

  • Choose the active payment gateway and currency under Settings → Payments
  • Add the Stripe or Paddle webhook and paste its signing secret
  • Configure and test SMTP under Settings → SMTP
  • Review the license delivery email under Settings → Email template
  • Confirm the storefront pages under Settings → Storefront
  • Pick a storefront theme and accent colour under Settings → Design
  • Remove the sample products and add your own
  • Place a test order in Stripe test mode or Paddle sandbox before going live
  • Update your store's terms and privacy policy to mention Stripe or Paddle

Settings

All configuration lives under Digital Licensing → Settings, split into five tabs: Payments, SMTP, Email template, Storefront, and Design.

Payments & Webhooks

The General panel controls store-wide payment behaviour:

SettingDescription
Active payment gatewayStripe or Paddle. Only one gateway is active at a time.
CurrencyThree-letter currency code, for example USD.
Download link lifetime (hours)How long a signed download link stays valid. The default is 24 hours. Customers can always get a fresh link from their account.
Download trackingOff by default. When enabled, records the license ID, product ID, and download time for dashboard statistics. IP addresses are not collected.
Payment Settings Choose the gateway, currency, and download link lifetime. The sidebar shows step-by-step webhook instructions and your endpoint URL.
Payment settings tab

Stripe: Select Test or Live mode, then paste the matching secret key and the webhook signing secret (whsec_…). Monthly and yearly plans create a Stripe subscription that renews automatically.

Paddle: Select Sandbox or Live, then paste your API key, client-side token, and webhook secret. Paddle acts as the merchant of record and handles tax.

Important: A license is only issued after Stripe or Paddle notifies your site through the webhook. If the webhook is missing or the signing secret is wrong, customers will pay but will not receive a license.

Create the webhook in your gateway dashboard using the URL shown on the settings screen, and enable these events:

GatewayEndpoint URLEvents to enable
Stripe
Developers → Webhooks
https://yoursite.com/wp-json/lucrativedigiprod/v1/webhook/stripe checkout.session.completed
checkout.session.async_payment_succeeded
invoice.paid
invoice.payment_failed
customer.subscription.deleted
Paddle
Developer Tools → Notifications
https://yoursite.com/wp-json/lucrativedigiprod/v1/webhook/paddle transaction.completed
subscription.canceled
subscription.past_due

Test and live modes each have their own endpoint and signing secret in Stripe. Make sure the mode in your Stripe dashboard matches the mode selected in the plugin.

SMTP

By default, plugin emails go through WordPress's wp_mail(), which many hosts deliver poorly. Enable Send plugin email through SMTP and enter your provider's host, port, encryption (TLS or SSL), username, and password. Gmail (with an App Password), Amazon SES, SendGrid, Mailgun, and any standard SMTP server all work.

Leave the password field blank when saving to keep the stored password. Use the test email button to confirm delivery before you start selling.

SMTP Settings Send license and product-update emails through your own mail server.
SMTP settings tab

Email Template

The License delivery email is sent after every successful payment. You can edit its subject and body, using these placeholders:

PlaceholderReplaced with
{product}Product title
{license_key}The customer's license key
{download_url}Signed, expiring download link
{customer_name} / {customer_email}Buyer's name and email
{plan}Lifetime, yearly, or monthly
{amount} / {currency}Amount paid and currency
{expires_line}Expiry date line for subscriptions (empty for lifetime)
{account_url}Link to the My Digital Account page
{site_name} / {order_id}Your site name and the order number
Email Template Settings Customise the subject and body of the license delivery email.
Email template settings tab

Storefront Pages

The plugin creates its storefront pages on activation. On this tab you can assign a different page to each role or recreate a page if it was deleted. Each page must contain its matching shortcode:

PageDefault URLShortcode
Digital Shop/digital-shop/[lucrativedigiprod_products]
My Cart/my-cart/[lucrativedigiprod_cart]
Digital Checkout/digital-checkout/[lucrativedigiprod_checkout]
My Digital Account/my-digital-account/[lucrativedigiprod_account]
Note: If WooCommerce is also installed, do not assign the WooCommerce Checkout page here. Use a dedicated page containing [lucrativedigiprod_checkout].
Storefront Settings Assign or recreate the Digital Shop, My Cart, Digital Checkout, and My Digital Account pages.
Storefront pages settings tab

Design

Choose a storefront theme that controls the layout of the shop, product, checkout, and account pages. The default theme, Aurora, uses soft cards, rounded corners, and gradient buttons.

Under Colours & typography you can override the accent colour and other palette values on top of the selected theme. Click Reset to theme defaults to restore the theme's original palette.

Storefront Theme & Colours Pick a storefront layout and adjust the accent colour to match your brand.
Design settings tab with storefront theme

Admin Guide

Everything you need to run the store is in the Digital Licensing workspace: Dashboard, Add Product, Products, Categories, Licenses, Payments, Coupons, and Settings.

Dashboard

The dashboard summarises your store at a glance: total products, licenses issued, active and expired licenses, orders, and revenue. Below the totals are charts of licenses by status and by product, followed by the most recent licenses and payments.

Dashboard Sales and license KPIs, charts, recent licenses, and recent payments.
Digital Licensing dashboard

Products

The Products screen lists everything you sell, with each product's status, category, tags, showcase label, billing plans, version, and whether a file is attached. Every row includes a ready-made [lucrativedigiprod_buy_box id="…"] shortcode with a copy button, so you can place that product's pricing on any page. Click Edit to reopen the product wizard.

Digital Products All products with their plans, file status, and copyable buy-box shortcode.
Digital products list

Add / Edit Product

Products are created with a four-step wizard. Your progress is shown across the top, and you can jump back to any step.

  1. Details

    Enter the product title, an optional short description (shown under the title in the shop grid), the URL slug, and the category. Use + New to create a category without leaving the wizard. You can also add tags and a showcase label (Featured, Popular, or Trendy) here.

  2. Pricing

    Turn on the billing plans you want to offer: Lifetime (one-time payment that never expires), Yearly, and/or Monthly (recurring subscriptions). Set a price for each enabled plan. Under Plan features, list one feature per line for each plan; these appear as bullet points on the storefront pricing cards. Copy the price plan shortcode shown on this step, because you will paste it into the description next.

  3. Product details

    Click Open block editor to write the full description with the WordPress block editor (or Elementor, if you use it). Paste the [lucrativedigiprod_price_plan id="…"] shortcode into a Shortcode block where you want the pricing cards to appear. On the same step, fill in the optional SEO title and meta description, and choose a thumbnail image for product cards and the product page.

  4. File & Publish

    Drag and drop the product file onto the upload area, or click Browse files. Files up to 64 MB are uploaded into a private, protected vault, never the public Media Library. Set the current version and publish the product.

Step 1 — Details Title, short description, slug, and category.
Add product wizard: details step
Step 2 — Pricing Enable Lifetime, Yearly, or Monthly plans and list each plan's features.
Add product wizard: pricing step
Step 3 — Product Details, SEO & Thumbnail Open the block editor for the description, copy the price plan shortcode, and set SEO fields and the thumbnail.
Add product wizard: product details step
Writing the Description in the Block Editor The full Gutenberg editor (or Elementor). The wizard bar at the bottom reminds you to add the price plan shortcode and lets you continue to the file step.
Product description in the WordPress block editor
Step 4 — File & Publish Upload the product file to the private vault, set the version, and publish.
Add product wizard: file and publish step

Releasing a New Version

When you improve a product, you can notify everyone who bought it:

  1. Open the product and go to File & Publish.
  2. Upload the new file and raise the Current version number.
  3. Optionally write a changelog, plus a subject and message for the customer update email.
  4. Check Email purchasers when I click Update product, then click Update product.

Only customers with an active, unexpired license are emailed, and each customer receives one email per version. The update email supports these placeholders: {product}, {version}, {customer_email}, {license_key}, {download_url}, {account_url}, and {changelog}.

This works for any kind of product, including HTML templates, PDFs, eBooks, and PHP scripts. It sends an email with a download link; it does not register native WordPress plugin updates.

Categories

Organise products into categories under Categories. Enter a name, an optional slug (generated automatically if left empty), an optional parent category, and a description. The list on the right shows each category's product count and a copyable shortcode, such as [lucrativedigiprod_products category="ebooks"], that displays only that category's products on any page.

Product Categories Add categories and copy a shortcode to show each category's products.
Product categories

Licenses

The Licenses screen lists every license key issued, along with the product, customer email, plan, status (Active, Expired, or Inactive), last payment, and expiry date. When a subscription renews, its last payment and expiry date update automatically. When a subscription is cancelled or a renewal fails, the license stops allowing downloads.

Licenses Every license key with its customer, plan, status, and expiry.
Licenses list

Payments

The Payments screen records every captured charge, including subscription renewals. Each row shows the date, type (purchase or renewal), customer, product, amount, gateway, the gateway's reference ID, and the resulting license expiry.

Payments A log of purchases and renewals with gateway references.
Payments list

Coupons

Create discount codes that customers enter at checkout. Each coupon has:

  • Code — what the customer types, for example SAVE20
  • Description — an optional note, visible only to admins
  • Discount type and amount — a percentage (1–100) or a fixed amount off the order total
  • Product — apply to all products or to one specific product
  • Minimum order — the lowest order total the coupon works on (0 for no minimum)
  • Usage limit — the maximum number of uses (0 for unlimited)
  • Expiry date — optional
Coupons Create percentage or fixed discounts with product restrictions, minimums, and usage limits.
Coupons screen

Customer Experience

This is what your buyers see on the front end, from browsing the shop to downloading their files.

Digital Shop

The Digital Shop page shows your products in a responsive grid. Customers can filter by category tab and by showcase type (Featured, Popular, or Trendy). Each card shows the thumbnail, category, short description, and starting price.

Digital Shop Product grid with category tabs and showcase filters.
Digital shop front end

Product Page

Each product page shows the thumbnail, your block-editor description, and pricing cards for every enabled plan, with their features. Customers can click Add to cart or go straight to Checkout.

Product Page with Pricing Plans Lifetime, Yearly, and Monthly pricing cards with Add to cart and Checkout buttons.
Single product page with pricing plans

Checkout

On the Digital Checkout page, customers enter a billing address, optionally apply a coupon code, review the order summary, and click Pay now. Returning customers who are logged in have their details filled in. New customers can create an account during checkout, and guest checkout also works.

The customer is then sent to Stripe Checkout, or shown the Paddle overlay, to enter card details. Monthly and yearly plans are set up as subscriptions.

Digital Checkout Billing address, coupon code, order summary, and Pay now button.
Digital checkout page
Payment Page (Stripe Checkout) Card details are entered on Stripe's hosted page, never on your WordPress server.
Stripe hosted payment page

My Digital Account

After paying, customers return to My Digital Account with a confirmation message, and receive their license key and download link by email. The account area has three tabs:

  • Orders — every purchase with its date, product, plan, total, and status
  • Downloads — each license key, its expiry date, and a Download button that generates a fresh signed link
  • Profile — name, email, billing address, and password change
Orders Payment confirmation and order history.
My Digital Account orders tab
Downloads License keys, expiry dates, and secure download buttons.
My Digital Account downloads tab
Profile Account details, billing address, and password change.
My Digital Account profile tab

Shortcodes

Use these shortcodes on any page, post, or Shortcode block. The block editor also includes a Digital store pattern category with ready-made catalogue, cart, checkout, and account layouts.

ShortcodeDescription
[lucrativedigiprod_products]Product grid with filters. Attributes: category (slug), tag, type (featured, popular, or trendy), per_page (1–48), columns (1–4), and title.
[lucrativedigiprod_buy_box id="123"]Pricing cards for a single product. Optional plan attribute to show one plan only.
[lucrativedigiprod_price_plan id="123"]Same as the buy box. Use it inside a product description.
[lucrativedigiprod_product id="123"]A full single product display.
[lucrativedigiprod_cart]Shopping cart.
[lucrativedigiprod_checkout]Checkout form.
[lucrativedigiprod_account]Customer account with Orders, Downloads, and Profile tabs.

Examples:

[lucrativedigiprod_products category="ebooks" columns="3"]
[lucrativedigiprod_products type="featured" per_page="6" title="Featured Products"]
[lucrativedigiprod_buy_box id="169"]

Troubleshooting

ProblemSolution
Customer paid but received no licenseCheck that the webhook exists in Stripe or Paddle, points to the correct URL, has the required events enabled, and that its signing secret is pasted in Settings → Payments. Stripe's webhook log shows delivery errors.
Webhook returns 404Set Settings → Permalinks to any option other than "Plain", then save.
Webhook returns 400 or 401The signing secret does not match. Test and live modes use different secrets.
License emails not arrivingEnable SMTP under Settings → SMTP and send a test email. Check the customer's spam folder.
Download link says it has expiredLinks expire after the lifetime set in Settings → Payments. The customer can generate a new link from My Digital Account → Downloads.
Download blocked for a subscriberThe subscription was cancelled or a renewal payment failed. Check the license status under Licenses.
File upload failsIncrease PHP upload_max_filesize and post_max_size, or ask your host to raise them.
Storefront page is blank or missingGo to Settings → Storefront and reassign or recreate the page.
Pricing cards not showing in the descriptionMake sure the [lucrativedigiprod_price_plan id="…"] shortcode is in a Shortcode block and at least one plan is enabled with a price.

Frequently Asked Questions

Does this require WooCommerce?

No. The plugin is a standalone digital store with its own checkout, licenses, and downloads.

Do I need to enable user registration in WordPress?

No. The checkout creates subscriber accounts regardless of WordPress's general Membership setting. Guest checkout also works; guest orders are accessed through the signed links in the email.

Can I use Stripe and Paddle at the same time?

No. Choose one active gateway in Settings → Payments.

Is download tracking enabled automatically?

No. Enable it under Settings → Payments. New records do not include IP addresses.

Do I need to update my terms and privacy policy?

Yes. Tell customers that payments are processed by Stripe or Paddle and link to that provider's terms and privacy policy.

What happens when I delete the plugin?

Deactivating keeps all store data. Deleting the plugin removes its custom tables, settings, product posts, and private product files, so back up your site first.

Support

If you need help, contact us through lucrativeit.com or the plugin site at wpdigitaldownload.lucrativeit.com. Please include:

  • Your WordPress and PHP versions
  • Which gateway you use (Stripe or Paddle) and whether it is in test or live mode
  • Steps to reproduce the issue
  • Any errors from your gateway's webhook log (remove secret keys)
  • Screenshots if applicable

This plugin is licensed under the GPLv2 or later. Payment card numbers are never stored in WordPress.

Changelog

Version 1.6.3

  • Clarified that customer version emails use signed download links and do not register WordPress plugin updates.

Version 1.6.2

  • Added developer metadata, a Settings action link, and storefront block patterns.
  • Made download tracking opt-in and stopped collecting IP addresses in new records.
  • Hardened account ownership, REST registration, input validation, and storage paths.
  • Prevented license fulfilment for unpaid Stripe Checkout sessions.
  • Rebuilt the translation template.

Version 1.6.1

  • Customer update emails when the product version changes.
  • Initial release.