EP Ecommerce
EP Ecommerce is the base plugin in a five-plugin family for selling information products from your PageMotor site. Memberships, digital downloads, license keys, bundles, and subscriptions. Payment providers (Stripe, PayPal) and checkout styling ship as separate extension plugins that hook into the same core.
Published by ElmsPark Studio.
The ecommerce family
Section titled “The ecommerce family”EP Ecommerce is built as a base plus four extensions. Install only the ones you need:
| Plugin | Role | Required? |
|---|---|---|
| EP Ecommerce | Base. Product CRUD, orders, memberships, license keys, download tokens. | Yes |
| EP Ecommerce Products | Styled checkout UI. | Yes, for visible checkout |
| EP Ecommerce Stripe | Stripe payment provider. | Only if using Stripe |
| EP Ecommerce PayPal | PayPal payment provider. | Only if using PayPal |
| EP Ecommerce Subscriptions | Recurring billing. | Only if selling subscriptions |
Each extension is documented separately. This page covers the base.
What EP Ecommerce does
Section titled “What EP Ecommerce does”Five product types
Section titled “Five product types”| Type | What it is |
|---|---|
| Membership | Grants ongoing access to gated content. |
| Download | Time-limited secure URL to a file (PDF, ZIP, MP3). |
| License | Generates a unique license key the customer can use to activate software. |
| Bundle | Combines multiple products into one purchase. |
| Subscription | Recurring billing. Requires EP Ecommerce Subscriptions. |
Orders
Section titled “Orders”Every purchase creates an order row. Orders track status (Pending / Paid / Failed / Refunded), customer details, and which product(s) were purchased.
Memberships
Section titled “Memberships”Membership products grant access for a fixed period or forever. Access checks are plugin-level so any plugin (like EP Membership) can ask “does this email have active access to membership level X”.
License keys
Section titled “License keys”Three generation formats:
- UUID —
f47ac10b-58cc-4372-a567-0e02b2c3d479. - Segmented —
ABCD-EFGH-IJKL-MNOP. - Alphanumeric —
A3F9X7Q2K8L1V6N4.
Licenses can have expiry dates, activation limits, and be validated via a simple API for software to phone home and check.
Secure downloads
Section titled “Secure downloads”For Download products, the customer gets a time-limited tokenised URL in their confirmation email. Tokens expire after a configurable window and honour a maximum download count, so a leaked URL can’t be mass-abused.
Shortcodes
Section titled “Shortcodes”| Shortcode | Purpose |
|---|---|
[ep-checkout product=my-product] | Checkout form for a specific product. |
[ep-membership-content level=premium]...content...[/ep-membership-content] | Gate content to members of a given level. Non-members see nothing (or a custom message). |
[ep-download product=my-download] | Download button, checks the current user’s purchase history and redirects to a valid secure URL. |
Requirements
Section titled “Requirements”- PageMotor 0.8.2b or later
- EP Suite base class
- EP Ecommerce Products for the checkout UI.
- At least one payment extension: EP Ecommerce Stripe or EP Ecommerce PayPal (or both).
Installation
Section titled “Installation”- Download
ep-ecommerce.zipplus the extensions you need from the EP Suite downloads page. - Upload and activate EP Ecommerce first.
- Upload and activate EP Ecommerce Products.
- Upload and activate your payment provider(s): EP Ecommerce Stripe and/or EP Ecommerce PayPal.
- If selling subscriptions, also install EP Ecommerce Subscriptions.
- Database tables are created automatically on first load.
Setting up your first product
Section titled “Setting up your first product”- Open Plugin Settings → EP Ecommerce → Products.
- Click Add Product.
- Pick a product type (membership, download, license, bundle, subscription).
- Fill in name, description, price, status.
- Type-specific fields appear:
- Membership: access level, duration.
- Download: file URL, max downloads, link expiry.
- License: format, expiry, activation limit.
- Save.
- Add
[ep-checkout product=my-product-slug]to a page.
The payment buttons render inside the .ep-ecommerce-payment-slot div in the checkout. Whichever payment extensions are active fill the slot with their buttons.
Database tables
Section titled “Database tables”{prefix}ep_ecommerce_products— product catalogue.{prefix}ep_ecommerce_orders— every purchase.{prefix}ep_ecommerce_memberships— active membership records.{prefix}ep_ecommerce_licenses— license keys with validation records.{prefix}ep_ecommerce_downloads— download tokens.
Extension API
Section titled “Extension API”Plugins extend EP Ecommerce by subclassing EP_Ecommerce_Extension and registering themselves. Available hooks:
| Hook | Purpose |
|---|---|
checkout_head($product) | Inject scripts or config before the checkout form. |
render_checkout($product) | Provide custom checkout HTML. |
process_payment($product, $data) | Handle the actual payment. |
after_fulfillment($product, $order_id, $data) | Post-purchase actions. |
product_types() | Register a custom product type. |
render_product_admin($product) | Admin fields for custom types. |
check_access($email, $level) | Override membership access checks. |
on_membership_granted(...) | React to membership grants. |
filter_license_validation($license, $response) | Modify license API responses. |
settings_fields() | Add settings to the EP Ecommerce settings page. |
Same pattern as EP_Email_Extension. See the Stripe and PayPal extensions for reference implementations.
Troubleshooting
Section titled “Troubleshooting”“Checkout renders but no payment buttons appear”
Section titled ““Checkout renders but no payment buttons appear””You need at least one payment extension installed and configured. Install EP Ecommerce Stripe or EP Ecommerce PayPal, paste API keys on their settings page, and the buttons render.
“Orders appear as Paid but no membership / download was granted”
Section titled ““Orders appear as Paid but no membership / download was granted””Check the payment extension’s webhook is configured correctly and reaching your site. Stripe / PayPal push async notifications; without webhooks, orders show as paid from the frontend flow but fulfilment doesn’t fire.
“Download URLs expire too quickly”
Section titled ““Download URLs expire too quickly””Configure per-product download token lifetime and max download count in the product’s admin. Default is usually 24 hours and 3 downloads, which is deliberately conservative.
“License keys I generate aren’t validating”
Section titled ““License keys I generate aren’t validating””Validation requires the software to call your site’s license API with the key. If the software isn’t coded to check, keys are cosmetic. This is about what the customer-facing software expects.
“I want to sell a custom product type that isn’t one of the five”
Section titled ““I want to sell a custom product type that isn’t one of the five””Build a small EP Suite plugin that extends EP_Ecommerce_Extension and implements product_types() and render_product_admin(). Ask on the support forum for the current reference signatures.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on, with starter questions and links preloaded for that exact screen.
For anything bigger — a bug report, a feature request, or a “how do I…” that needs a real reply — open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply. Usually within a few hours. Tickets don’t disappear into the void.