Pars Elementor
Professional Elementor addons for Persian and global WordPress sites: native booking, OTP forms, design system, RTL and Jalali.
by Alireza Aminzadeh · github.com/alireza-aminzadeh/pars-elementor · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/alireza-aminzadeh/pars-elementor/archive/refs/heads/main.zipReadme
Pars Elementor
Professional tools for Persian & global Elementor sites
Native booking engine · Conditional forms & OTP · Design system · RTL, Jalali & international
| Version | 1.23.0 |
| Author | Alireza Aminzadeh |
| Website | ariacoder.ir · aryait.net |
| WordPress | 6.8+ (tested up to 7.1) |
| PHP | 7.4+ |
| Elementor | 3.20+ (tested up to 4.2.3, including Atomic Editor) |
| License | GPL v2 or later |
| Languages | English (source strings) · فارسی (fa_IR, bundled) |
| Requires plugins | Elementor |
WordPress.org uses the companion readme.txt. This file is the product and developer guide.
English documentation
Why Pars Elementor
Pars Elementor is not a pack of decorative widgets. It is a bilingual Elementor addon whose modules share one stack: native Elementor design, dedicated database tables, guest-first flows, OTP and Iranian SMS, WooCommerce as an optional payment adapter, and Jalali / RTL / Persian digits without locking the product to Iran.
The editor UI follows the WordPress site language. When Elementor is active, a Pars Elementor category appears with the registered widgets.
Elementor widgets
When Elementor is active, these widgets appear under the Pars Elementor category:
| Widget | Role |
|---|---|
| Starter | Onboarding / sample widget |
| Search | Ajax live search with drag-and-drop sources |
| Advanced Filter | Faceted Ajax filters on a dedicated index |
| Form | Conditional multi-step forms with OTP |
| Booking | Native appointment engine |
| Quote calculator | Live pricing, proforma, deposit |
| B2B product CTA | Selling-mode overlay on WooCommerce SKUs |
| B2B inquiry list | Parallel RFQ list (not the cart) |
| B2B product documents | Datasheets and gated files |
| B2B alternatives | Equivalent / replacement products |
| B2B compare | Side-by-side industrial compare |
| Secure Content | Gated files, video, and HTML with signed links |
| Locator | Branches, agencies, and service centers on a map |
| Privacy video | Click-to-load YouTube / Vimeo |
| Media image | Focal point and optional mobile image |
| SVG icon | Sanitized SVG / sprite icon |
| Remote Data | REST/JSON cards, table, chart, Loop |
| Account | Login, registration, forgot password |
| Account profile | Profile completion and verification |
| Account dashboard | Designable member dashboard |
| Account activity | Activity list for a custom dashboard |
| Account visibility | Show or omit HTML by identity |
| A/B split | Cache-safe experiment arms |
| Campaign countdown | Real end-time countdown |
| Modal, Drawer, Dropdown, Tabs, Accordion, Tooltip, Toast, Stepper | Accessible Component States |
Requirements
- WordPress 6.8 or later (tested up to 7.1)
- PHP 7.4 or later
- Elementor 3.20 or later (required plugin; tested with 4.2.3, including Atomic Editor)
- WooCommerce only if you charge Iranian rial (or other local-only currencies) through installed shop gateways. Stripe and PayPal run from Pars Global Pack without WooCommerce.
Modules
| Module | Role | Status |
|---|---|---|
| Core | Bilingual bootstrap, admin dashboard, Elementor category | Available |
| Pars Global Pack | Shared international layer: E.164 phones, timezone/DST, Stripe/PayPal, Twilio/WhatsApp (via Connect), Google/Outlook calendars, address and date formats | Available |
| Search | Ajax live search across post types and taxonomies | Available |
| Booking | Appointment engine with flow builder, not a calendar shortcode | Available |
| Quote calculator | Conditional live pricing, guest inquiries, proforma, deposit or full pay | Available |
| B2B commerce | Selling-mode overlay on WooCommerce SKUs: RFQ list, call, MTO, hybrid, login-gated, coming soon, EOL — Quote handles price/deposit/order | Available |
| Pars Secure Content | Gated files, videos, and HTML: form unlock, signed links, expiry, download caps, role or purchase access, private storage, email delivery, GA4 and Connect | Available |
| Pars Locator | Branches, agencies, and service centers on a map | Available |
| Accounts | Login, registration, profile, protected pages, designable dashboard | Available |
| Forms & OTP | Conditional multi-step forms; shared identity for booking and CRM | Available |
| Pars Audit | Real quality, accessibility, and Elementor document checks | Available |
| Pars Update Guard | Before/after screenshots around plugin updates; layout, font, spacing, JS/PHP, deprecated widgets | Available |
| Safe Edit & Dependency Map | Where templates, colours, fonts, classes, and widgets are used; preview, snapshot, replace, restore | Available |
| Deploy & Package | Move pages, templates, or a single section between sites with media, used globals, plugin report, preview, overwrite protection, and restore | Available |
| Pars Design System | Tokens, classes, presets, brand locks, leftover migrate, style guide, kit transfer — controls Elementor globals, does not replace them | Available |
| Client Mode | Restricted Elementor for delivered sites: locks, approval queue, edit history, white label | Available |
| Pars Review | Guest design-review links: pin comments on the live page, mobile/desktop separately, open/in-progress/resolved, image attach, page version, final approval, change report, expiry, white label | Available |
| Advanced Filter | Faceted Ajax filters for shops, directories, real estate, and industrial catalogues | Available |
| Track & A/B | First-party events, GA4/GTM, UTM persistence, Consent Mode, cache-safe A/B with sequential stats | Available |
| Remote Data | REST/JSON sources, field mapping, auth, cache, pagination, fallback, table/card/chart/Loop | Available |
| Programmatic Pages | Data-driven SEO pages from CSV, Excel, API, or Google Sheets, mapped onto an Elementor template with quality gates, JSON-LD, per-row robots, and hub/spoke links | Available |
| Pars Connect | Shared connection hub: webhooks, REST, Make/Zapier/n8n, SMTP, Iranian SMS, Twilio, WhatsApp, Telegram, Google Sheets | Available |
| Asset Policy | Unload scripts and styles per post type, archive, and taxonomy. Presets, bulk by source, guest preview with request/KB totals. Rules inherit; dequeue only | Available |
| Media & Privacy | Click-to-load YouTube/Vimeo, youtube-nocookie, map consent, local fonts, SVG sanitize/sprite, per-page third-party report — not a cache or image optimizer | Available |
| Pars Rules | Shared condition engine: server-side show/hide for forms, quotes, Account visibility, and scheduled content (time + UTM) | Available |
| Content schedule | Start/end, daily or weekly hours, timezone, UTM, campaign countdown, popup windows, fallback after end, cache-safe flips, activation history — compiled to Pars Rules | Available |
| Component States | Modal, Drawer, Dropdown, Tabs, Accordion, Tooltip, Toast, Stepper — keyboard, focus, ARIA, RTL, deep link, history, loading/error/empty, dynamic content, conditional open/close. Iranian extras are adapter packs | Available |
| Pars Iran Pack | Shared Iranian localisation: Jalali display, Persian digits, mobile/ID/Sheba/postal checks, province and city, official holidays, SMS/map/gateway status. Storage stays international | Available |
Core
- English source strings and bundled Persian translation (
/languages) - Plugin UI follows the WordPress locale (no separate language switcher)
- Admin dashboard under Pars Elementor with environment and widget status
- Settings link on the Plugins screen
- Assets load only when the related module or widget is used
- PSR-4 autoload under
Pars_Elementor\ - Activation, deactivation, and uninstall hooks; tables and options are versioned
Pars Global Pack
Shared international layer used by Booking, Quote, Forms, Locator, and Identity. It is not a widget and not a second Connect: Twilio and WhatsApp credentials stay in Pars Connect; Global Pack picks the connection and always sends E.164.
Capabilities
- E.164 mobiles: national numbers are stored as
+and digits using the default country; Iranian strict mobile stays in Pars Iran Pack - Timezone and DST: IANA zones; spring-forward gaps reject booking slots; UTC storage
- Stripe Checkout and PayPal Orders v2 with signed webhooks; IRT/IRR always WooCommerce
- Twilio SMS and WhatsApp via the selected Pars Connect connection
- Calendars: ICS plus Google / Outlook / Microsoft 365 template URLs for guests; optional OAuth staff sync
- Addresses and dates: country field order, postal patterns, and date examples
Open Pars Elementor → Global Pack. Webhook URLs: /wp-json/pars-elementor/v1/global/webhooks/stripe and …/paypal.
Search
Ajax search widget. The site admin chooses which content is searchable and in which order.
Content sources
The editor control lists every public post type and its taxonomies. Typical sources:
- Posts and their taxonomies
- Pages and page taxonomies (when they exist)
- Products and product taxonomies (WooCommerce)
- Any other public custom post type
Capabilities
- Enable or disable each post type and taxonomy from the widget
- Drag-and-drop order of post types and taxonomies in the results
- Optional featured image in results
- Ajax search and grouped live results (no full-page reload)
- Dedicated results page (
?pars_s=) that keeps the same post types and taxonomies as the widget (pars_src) - Submit, “view all”, or a result click can open that page; live typing is never logged
- Saved searches: unique visitor queries stored in a dedicated table
- Admin submenu Saved Searches under Pars Elementor
- Configurable retention (how many unique queries to keep;
0turns logging off) - Per-widget switch to store completed searches (submit, view all, or a result click)
Booking
Treat this as an appointment engine, not a calendar widget dropped into a shortcode.
Independent policy axes
These three settings are independent of each other:
| Axis | Options |
|---|---|
| Payment | Off · On-site · Full online |
| Account | None (guest) · Optional · Required |
| Contact | None · Email · Mobile · Either · Both · From profile |
Guest booking is the default. Fully anonymous booking is allowed only when no payment is collected. Payment without any contact or account is blocked, because confirmation, cancel, reschedule, and refund would be impossible. Anonymous bookings still receive a secure booking code.
Flow builder
The site manager can enable, disable, or reorder steps instead of hunting through scattered options:
- Service
- Location (branch)
- Provider, or “any”
- Date
- Time
- Customer details
- Email or mobile OTP
- Login or create account
- Payment
- Confirmation
Starter patterns: free guest, paid guest, member, paid member, create account after booking, fully anonymous.
Services and scheduling
- Services with duration and price
- Staff / providers
- Weekly working hours
- Holidays and date exceptions
- Buffer before and after each appointment
- Minimum notice before booking
- Maximum bookable horizon
- Concurrent-booking protection
- Capacity per time slot
- Automatic confirmation or manual approval
Customer data
- Email, mobile, either, or both
- Custom fields
- Terms and privacy acceptance
- Email or mobile verification
- Prefill for logged-in users
- Guest booking
- Optional account after booking (passwordless OTP when enabled)
- Manage, cancel, and reschedule through a signed link without an account
Payments (first version)
- No payment
- Pay on site
- Full online payment
- Optional WooCommerce adapter so Iranian and international gateways already installed on the shop can be reused
The engine does not depend on WooCommerce. The shop is only a payment adapter.
Payments (later versions)
- Fixed or percentage deposit
- Remaining balance
- Discount codes
- Refunds
- Pay-again link
- Cancellation penalty policy
Iran
- Jalali and Gregorian display
- Times stored in a standard form (UTC); Jalali is display-only
- Correct
Asia/Tehranhandling - Persian and Latin digits
- Real RTL on every step and error message
- ZarinPal and other gateways preferably through WooCommerce
- SMS adapter for Iranian providers
- Mobile OTP login and verification
- Configurable official holidays and working days
- Iranian mobile format with E.164 storage