Tanzeel Order Forms & Payments

Plugin Banner

Tanzeel Order Forms & Payments

by tanzeelrehman

Download
Description

Tanzeel Order Forms & Payments is an order form plugin for service businesses, agencies and freelancers who sell packages, not products. It is not a general purpose contact form builder and it is not a shop. It covers the part in between: taking an order, getting it paid, and following up when it is not.

What makes it different

  • Unpaid order recovery, built in. When a customer clicks “Proceed to Checkout” the order is saved as Pending with its Order ID. If it is still unpaid after the delay you choose, you and the customer each get one email. The customer’s email carries a signed link that reopens their own order on the payment step, with every field and the chosen package already filled in, so the Order ID never changes and nothing is typed twice.
  • No duplicate orders. Repeated clicks, retries and slow connections update the same pending order instead of creating new ones. The link between a visitor and their order is a server side signed key.
  • Sequential Order IDs per form with your own format (for example Order [ID2326]) and a start number, shown in emails, exports and the payment description at Stripe and PayPal.
  • Package cards with deep links. Priced options render as selectable package cards, and a link like ?package=gold opens the form with that package already selected.
  • Safe test page. Every form has a private, unindexed preview page. With PayPal sandbox keys saved, orders placed there pay through the sandbox while the live form keeps the live keys.
  • Coupons per form. Percent or fixed discounts with an expiry date, a usage limit and a live “Used” count. The discount is always recalculated on the server.
  • Optional orders portal. A noindexed front end dashboard where a team member can follow and manage orders without a WordPress account, with a pending payments queue and one click pay links.

Form builder

  • Drag and drop builder with 18 field types: text, email, phone, URL, number, date, paragraph text, dropdown, radio, checkboxes, file upload, image upload, full address block, coupon, hidden field, heading, paragraph and notes.
  • Full width or half width fields, side by side.
  • Required fields, placeholders, default values and help text.
  • Copy fields from one form and paste them into another.
  • Preview any form on a private, unindexed test page before it goes live.

Payments

  • Stripe Checkout and PayPal (PayPal button plus debit or credit card).
  • Four ways to set the amount: one priced field shown as package cards, a fixed price, all priced options added up, or a quantity multiplied by a price per unit (for example 5 videos x 30 each).
  • A live total updates as the customer picks options.
  • Coupons: a “Got a coupon?” box with an Apply button. Percent or fixed discounts, expiry dates and usage limits, managed per form. A 100% coupon completes the order without payment.
  • Two step checkout: details first, then an order summary with the payment buttons.
  • Prices are always computed on the server from the saved form, never trusted from the browser.
  • Every payment is confirmed with the gateway (and the Stripe webhook) before an order is marked paid.
  • Separate PayPal sandbox keys for the preview page, so test orders never move real money.
  • Package links: ?package=gold preselects an option.

Orders

  • Sequential Order IDs with your own format, for example Order [ID2326], and a per form start number.
  • Entries screen with search, filters, charts and CSV export.
  • Unpaid order reminders: if an order is still pending after a delay you choose, you and the customer each get one email. The customer’s email carries a secure link that reopens their order on the payment step.
  • Reset orders: after testing, delete every order and entry in one step (type DELETE to confirm). Forms, settings and coupons are kept.

Emails

  • Branded HTML emails for the admin and the customer, editable in a template editor with live preview and a test send.
  • Placeholders such as {order_id}, {customer_name}, {amount}, {fields_table}, {payment_summary}, {order_cards} and {coupon_code}.
  • Each form can have its own admin and customer email subject, with a live preview.

Orders portal (optional)

An optional, noindexed front end page where a team member can follow orders without a WordPress account: dashboard with a pending payments queue, order list, order details, copy or email the customer’s pay link, resend emails and CSV export. It is off by default; turn it on and choose its address and login in Settings.

Elementor

A “Tanzeel Order Form” widget with package cards per row (separately for desktop, tablet and mobile) and detailed style controls for package cards, checkout sections, the form box, labels, fields, buttons, the total box and errors. The shortcode works everywhere else:

[tanzeel_order_form id="1"]

Security

  • Nonces and capability checks on every admin action.
  • A spam limit on new orders per visitor (adjustable in Settings) and a honeypot against bots. Behind Cloudflare the visitor’s real IP is used, and only when the request really comes from Cloudflare.
  • Uploads restricted by type and size, stored with unguessable file names.
  • Prepared SQL statements throughout.

External services

This plugin connects to the payment services below only when you add their API keys in Tanzeel Order Forms > Settings and enable them on a form. Without keys, no data is sent anywhere.

Stripe

Used to take card payments through Stripe Checkout.

  • When a customer pays, the plugin sends the order amount, currency, a description (form title, chosen package and Order ID), the internal order number as metadata, the customer’s email address and the return and cancel URLs to the Stripe API (api.stripe.com) to create a Checkout Session. The customer is then sent to Stripe’s hosted payment page.
  • When the customer returns, and when Stripe sends a webhook request to your site (only if you set a webhook signing secret), the plugin asks the Stripe API for the session status to confirm the payment.
  • Service provided by Stripe, Inc. Terms of service, Privacy policy.

PayPal

Used to take PayPal and card payments through PayPal Checkout.

  • On pages with a payment form, the PayPal JavaScript SDK is loaded from www.paypal.com with your public client ID and currency. The SDK runs in the visitor’s browser and connects to PayPal directly, so PayPal receives the visitor’s IP address and browser details.
  • When a customer pays, the plugin sends the order amount, currency, order description, the internal order number, the return and cancel URLs and your site name to the PayPal REST API (api-m.paypal.com, or api-m.sandbox.paypal.com in sandbox mode) to create and capture the order.
  • Service provided by PayPal. User agreement, Privacy statement.

Credits

  • Sora font by the Sora Project Authors, bundled in fonts/ under the SIL Open Font License 1.1 (see fonts/OFL.txt).
  1. Upload the tanzeel-order-forms-payments folder to /wp-content/plugins/, or install the plugin from the Plugins screen.
  2. Activate the plugin.
  3. Go to Tanzeel Order Forms > Settings and add your Stripe secret key and/or PayPal client ID and secret.
  4. For Stripe, add a webhook for the checkout.session.completed event pointing to the URL shown in Settings.
  5. Go to Tanzeel Order Forms > Add New, build a form and save it.
  6. Add the form to a page with the shortcode [tanzeel_order_form id="1"] or the Elementor widget.
Do I need Stripe and PayPal both?

No. Use either one, both, or neither. A form without payment works as a normal form.

Can I test payments without real money?

Yes. Add PayPal sandbox keys in Settings, then open the form’s Preview page. Orders placed there use the sandbox. For Stripe, use your test secret key (sk_test_).

Where are uploaded files stored?

In the submitflow folder inside your WordPress uploads directory, with a random prefix on every file name.

What happens to my data if I delete the plugin?

Nothing, unless you check “Delete all data on uninstall” in Settings first. Then deleting the plugin removes all forms, entries and settings.

Does it work with page caching?

Yes. The form refreshes its security token before submitting, so it works on cached pages.

Finding a suitable order management solution

By wayne2315pf on October 15, 2026

Finding a suitable order management solution for a service-based website can be challenging. This plugin brings several useful features together, including customizable forms, payment processing, and order tracking. The abandoned-order recovery feature is particularly interesting. It looks like a useful option for freelancers and small businesses.

A useful addition to the WordPress ecosystem

By hqcitations on October 15, 2026

A useful addition to the WordPress ecosystem for anyone managing service orders online. Having form customization, payment integrations, and order management in one place can simplify the process for both website owners and customers. I would like to see the plugin continue growing with more integrations and improvements.

1.1.0

  • New: coupons per form, with a Coupon field (“Got a coupon?” and Apply). Percent or fixed, expiry date, usage limit, on/off switch and a Used count. Shown in the checkout summary, emails, entries and the portal.
  • New: payment modes “Add up all priced fields” and “Multiply: quantity x price per unit”, with quantity cards and a live total.
  • New: each form can set its own admin and customer email subject. New tokens {entry:EntryId}, {order_cards}, {site_domain}, {coupon_code} and {discount}.
  • New: Settings > Reset orders deletes every order and entry after testing.
  • New: orders portal pending payments queue, copy pay link buttons, Open and Email this link, and whether the reminder was sent.
  • New: Elementor package cards per row for desktop, tablet and mobile, plus style controls for package cards and checkout sections.
  • New: clear PayPal error messages (declined card, paying your own account, refused) with the PayPal reference.
  • Improved: the spam limit only counts new valid orders, never re-clicks or edits, and can be changed or turned off in Settings.
  • Fix: unpaid order reminders could be sent right away and pay links could open the homepage, because two order columns were saved in the wrong format. Existing orders are repaired on update.

1.0.1

  • Review fixes: input sanitizing and output escaping throughout.
  • Order numbers now work on every database, including SQLite.
  • Refreshed admin, settings and email designs.

1.0.0

  • First public release.
Back to top