WP Manifestindependent plugin directory
manifest / builders / pars-elementor

Pars Elementor

Professional Elementor addons for Persian and global WordPress sites: native booking, OTP forms, design system, RTL and Jalali.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/alireza-aminzadeh/pars-elementor/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Pars Elementor — Professional tools for Persian and global sites

Pars Elementor

Professional tools for Persian & global Elementor sites
Native booking engine · Conditional forms & OTP · Design system · RTL, Jalali & international

English · فارسی

Version WordPress PHP Elementor License Languages

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.


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:

  1. Posts and their taxonomies
  2. Pages and page taxonomies (when they exist)
  3. Products and product taxonomies (WooCommerce)
  4. 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; 0 turns 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:

  1. Service
  2. Location (branch)
  3. Provider, or “any”
  4. Date
  5. Time
  6. Customer details
  7. Email or mobile OTP
  8. Login or create account
  9. Payment
  10. 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/Tehran handling
  • 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

International

  • Detect or choose the customer timezone
  • DST-safe scheduling (invalid civil times are rejected)
  • Stripe / PayPal in Pars Global Pack, or WooCommerce for Iranian and shop gateways
  • Google Calendar, Outlook, and Microsoft 365 add-to-calendar links, plus ICS
  • Translatable UI and multilingual sites
  • Local date and time
  • Keyboard and screen-reader accessibility
  • Webhooks and REST API

Reliability

  • Dedicated booking tables — appointments are not piled into postmeta
  • Temporary slot hold when the customer enters payment
  • Automatic release after the hold expires
  • Payment confirmed only by a valid callback / webhook
  • Duplicate transaction protection
  • UTC storage
  • Signed guest links for cancel and reschedule
  • Status-change history
  • Personal-data retention period
  • Separate capabilities for manager, receptionist, and provider
  • CSV export

Elementor experience

The booking form is designed in Elementor, not injected as a shortcode. Loading, error, slot-full, failed payment, and confirmation states are first-class design surfaces.


Quote calculator

Price inquiry for print shops, clinics, construction, insurance, transport, manufacturing, and professional services. It reuses the form condition engine, formula calculator, Identity OTP/SMS, and the WooCommerce payment adapter.

Capabilities

  • Conditional fields (show hours only for a given service, rush fees only for colour print, …)
  • Pricing from quantity, area (width × height), time, or selections
  • Instant live total in the widget
  • Exact number or a price range (min/max factors)
  • Tax (inclusive or exclusive), discount, and extra line items
  • Email and SMS of the result (pars_elementor/sms)
  • HTML proforma (print / save as PDF) plus a generated PDF attachment
  • Pay the full amount or a deposit
  • Save the request without creating an account
  • Staff convert a quote into a booking reservation or a WooCommerce order

Starter patterns: print shop, construction/area, medical, insurance, transport, manufacturing, professional services.

Guest manage links are signed. Dedicated tables: pars_elementor_qt_*.

Usage

  1. Open Pars Elementor → Quote flows and pick an industry pattern (or start from print).
  2. Set display (exact or range), tax, discount, extras, and payment (off / full / deposit / visitor choice).
  3. Add the Quote calculator widget in Elementor and select that flow.
  4. Review inquiries under Pars Elementor → Quotes. Convert to a reservation or an order when ready.

B2B commerce

Industrial catalogues where a SKU is not always “add to cart”. B2B is a selling-mode overlay on WooCommerce products, not a second Quote calculator.

Quote calculator stays for services (print, insurance, area). B2B replaces the product CTA, keeps inquiry SKUs off the cart, then reuses Quote for the document, PDF, deposit, and conversion.

Modes

Inherit from the product category, then a product override, then situational rules (quantity vs hybrid threshold / MOQ / login):

  • Direct purchase (buy) — default, so existing shops stay unchanged
  • Price inquiry — RFQ list instead of the cart
  • Call us — phone or WhatsApp before any number
  • Made to order — configure, then request a quote (often with a drawing)
  • Hybrid — buy below a quantity threshold; inquire above it
  • Price after sign-in — guests must log in first
  • Coming soon — waitlist
  • Discontinued — no purchase; show equivalents

Two baskets

WooCommerce cart stays for buyable SKUs. The inquiry list is a parallel cookie-backed list. Inquiry products never enter the cart.

Submit opens a Quote row on the dedicated flow slug b2b-commerce (payment_mode=choice). Staff set a price, send it, the buyer accepts, then the existing Quote pay / Woo deposit path runs.

Usage

  1. Open Pars Elementor → B2B settings. Leave the default mode on Direct purchase.
  2. Set a category or product mode (product metabox Pars B2B Commerce).
  3. Create a page with the B2B inquiry list widget and select it as the list page.
  4. Optional: B2B product CTA, documents, alternatives, and compare on the product template.
  5. Review requests under Pars Elementor → B2B inquiries. Price, send, then the buyer accepts on the signed Quote link.

Dedicated tables: pars_elementor_b2b_*. Guest manage links stay on Quote.


Pars Secure Content

For B2B catalogues, courses, and service sites that should not leak a direct file URL.

  1. Open Pars Elementor → Secure Content and add a file, video, or gated HTML block. The file is copied into uploads/pars-secure (web access denied).
  2. Choose access: built-in lead form, a Pars Form, logged-in users, WordPress roles, or a WooCommerce purchase.
  3. Set link expiry (hours) and a download cap. Optionally email a signed link or a small attachment.
  4. Drop the Secure Content widget onto the page. After unlock, visitors receive /pars-secure/{token} only — never a media-library path.
  5. Review leads under Secure grants. Resend or revoke. Connect routes secure.unlocked / secure.downloaded / secure.viewed / secure.emailed (no signed URL in the payload). Track maps downloads to GA4 file_download.

Video is streamed with Range support and does not consume the download quota. This is access control, not DRM.


Pars Locator

Branches, agencies, and service centers on a map — a geographic catalogue, not a decorative map widget.

Works on its own. If Booking is active, a point can link to “Book at this branch” with location_id preselected.

Point catalogue

Each point can store:

  • Type: branch / agency / service center / custom
  • Name, slug, short description
  • Structured address: province, city, district, full address, postal code
  • lat / lng (required to appear on the map)
  • Phone, mobile, WhatsApp, email, website
  • Weekly hours plus holiday exceptions
  • Image / logo / small gallery
  • Status: active / inactive / coming soon
  • Sort order and featured pin
  • Optional link to a Booking location
  • Services from a shared catalogue (and booking services from a linked location)

Points without coordinates stay in admin with a warning and never render on the map.

Map and frontend

  • Elementor widget with map + list + filters
  • Two-way sync: marker click highlights the card; card click zooms the marker
  • Marker clustering for large catalogues
  • Distinct icon / color per type
  • Layouts: map and list side by side, map above list, map only, list only
  • Popup: name, type, address, distance, open/closed, call and directions
  • Full RTL and Persian digits
  • Mobile: sheet over the map and horizontal cards
  • Map engine is selectable (not Google-only):
    • Default: Leaflet + OpenStreetMap / Carto (no required API key)
    • Neshan and Map.ir when an API key is set (Iran)
    • Google Maps when an API key is set (Leaflet clustering is off on Google)
    • Paid layers fall back to OpenStreetMap if the key is missing
  • Directions: Neshan, Balad, Google Maps, Waze

Visitor search and filters

  • Text search: name, address, city
  • Multi-select type filter
  • Service filter (chips from the locator catalogue)
  • Province / city filter
  • Widget can limit the catalogue to selected types, cities, or services
  • Near me: browser geolocation and radius (5 / 10 / 25 / 50 km)
  • Sort: nearest, A–Z, featured
  • City search without GPS
  • Empty state with a suggestion to widen the radius
  • Campaign deep links such as ?city=tehran&type=branch

Point details

  • Full address, mini-map, today’s hours, open/closed now
  • One-tap tel:, WhatsApp, copy address
  • Directions in the visitor’s chosen app
  • Booking CTA when linked
  • Shareable point URL

Admin

  • Dedicated points screen (not only Elementor controls)
  • Filters by type, city, and status
  • Add/edit with a map picker (not lat/lng alone)
  • Forward and reverse geocoding (Neshan when a key is set, otherwise Nominatim), with a 24-hour cache
  • CSV import and export (including a services column)
  • Service catalogue on Locator settings (name, status, assign per point)
  • Global settings: map engine, Neshan / Map.ir / Google keys, default radius, directions, booking page
  • Capability to manage points without full plugin settings access
  • Server-side radius search (Haversine / bounding box) so the full catalogue is not sent to the browser

Intentionally out of the first version: in-page turn-by-turn routing, self-serve franchise portals, live traffic, and user check-in.


Accounts

Identity and the user account only — not a membership, subscription, or paywall plugin.

Visitors can sign in with email or mobile, with a password or a one-time code. Registration is multi-step: contact, OTP, then optional password and profile details. The profile widget collects remaining fields and verifies email or mobile. Protected pages send guests to login; optional rules can also require a complete profile.

Elementor widgets:

  • Account — login, registration, forgot password, or both as tabs
  • Account profile — edit details, complete the profile, verify channels
  • Account dashboard — designable greeting, progress, bookings, form submissions, quotes, and shop orders
  • Account activity — one list, for composing a custom dashboard
  • Account visibility — show or hide content by login, role, or verification. The same rules are also on the Advanced tab of any Elementor element.

New accounts receive only a low-privilege WordPress role (subscriber, or customer when WooCommerce is active). Administrators and editors cannot be assigned here.


Forms and OTP

The most important shared layer: it underpins booking, CRM, and later modules. A clone of Elementor Form or Fluent Forms is not the goal. Differentiation is conditional flows, OTP, UX, and connectivity.

The Form widget is registered. Admin screens: Forms, Form submissions, and Form settings.

Capabilities

  • Multi-step forms (field, OTP, account, and review steps)
  • Field types: text, textarea, email, phone, number, select, radio, checkbox, date, file, hidden, HTML, calculated, consent, plus Iran pack: national ID, Sheba, postal code, province, city, Jalali date
  • Conditional logic to show or hide fields
  • Draft save and resume later (configurable TTL)
  • Email, mobile, or either
  • Email and mobile verification with OTP
  • Registration before, during, or after submit (Account bridge)
  • International phone validation
  • Secure file upload
  • In-form calculations
  • UTM and traffic-source capture
  • Webhooks and external services
  • Anti-spam, honeypot, rate limits, and CAPTCHA (Turnstile / reCAPTCHA)
  • Every state designed in Elementor (loading, error, OTP, success)

Starter flows

Pattern Intent
Contact with OTP Email or mobile, required verification, optional draft
Quote with calculations Conditional extras and a live total; OTP after submit
Multi-step intake Branching steps, file upload, optional account after submit

Shared identity

OTP, phone normalization, and rate limiting live in a shared Identity layer so Forms, Booking, and future CRM do not each invent their own verification stack. Submissions use dedicated tables, not postmeta.


Pars Audit

A real quality module — not a floating “Accessibility” button. It finds actual problems on Elementor documents and rendered HTML.

Open Pars Elementor → Audit, scan one document or the whole site, then jump to the widget in Elementor. The editor also has a PA panel for the current document. Hidden widgets, broken dynamic tags, and template includes are read from saved Elementor data, not guessed from a toolbar overlay.

Checks

  • Incorrect heading order (H1–H6)
  • Images without alt
  • Links and buttons without an accessible name
  • Forms without labels
  • Insufficient color contrast
  • Duplicate IDs
  • Broken links
  • Horizontal scroll on mobile
  • Extra fonts and icon kits
  • Hidden widgets that still load
  • Tab order and keyboard traps
  • Broken Dynamic Tags
  • Dependent pages and templates
  • Inconsistent settings across breakpoints

Pars Update Guard

Elementor sites often break after an Elementor, Pro, or addon update. Audit finds document problems; Update Guard is the sellable pre-update / post-update visual check.

Open Pars Elementor → Update Guard. Seed the watchlist (homepage, WooCommerce cart/checkout, form and payment pages), capture a baseline on desktop, tablet, and mobile, update, recapture, then compare.

  • Visual before/after (layout map plus side-by-side screenshots)
  • Measured drift: size, font family/size/weight, margin/padding, position and display
  • Stricter fail scores for form and checkout pages
  • JavaScript errors from the live visit and PHP errors during that same request
  • Deprecated and unregistered widgets still stored in Elementor JSON
  • Addon “Elementor tested up to” vs the Elementor version on the site
  • Confirmation before high-risk updates; optional block of auto-updates for Elementor, Pro, and WooCommerce

No headless Chrome is required. The admin browser opens each watchlist URL in an iframe at the breakpoint width so Elementor CSS actually applies.


Safe Edit & Dependency Map

Agency inventory for Elementor. Audit finds problems; Safe Edit answers “where is this used?” before anyone changes a URL, class, colour, widget, or removes an addon.

Open Pars Elementor → Safe Edit. The first visit builds a usage index of every Elementor document. Rebuild it after large imports.

  • Where each template, header, footer, popup, and loop is embedded
  • Theme Builder display conditions plus incoming / outgoing dependencies
  • Global colour and typography usage
  • Find CSS classes, URLs, and widget types
  • Preview a replacement, then apply (a snapshot is written first)
  • Restore any snapshot; a safety copy is taken before restore
  • Plugin impact: pages that would lose addon widgets if that plugin were deactivated
  • Confirmation on Plugins → Deactivate / Delete when indexed pages still use that addon’s widgets
  • Orphan widgets left behind after an addon was already deleted

Editors can view the map. Applying replacements and restoring snapshots requires a site administrator (manage_options or pars_mutate_safe_edit).


Deploy & Package

Move Elementor layouts from development to staging to production without copying a whole database.

Open Pars Elementor → Deploy. From the Elementor editor, PD packages the last saved document or the selected section.

  • Package a page, template, or a single section / container
  • Images and other local media travel in the zip (hashed; reused on import)
  • Used Elementor global colours and typography (not the entire kit unless you choose overwrite)
  • Required plugins and missing widgets listed before anything is written
  • Source-site URLs rewritten to the destination (http/https and www variants)
  • Preview is mandatory: nothing is saved until you apply
  • Overwrite is blocked until you confirm with REPLACE or the target title; a snapshot is taken first
  • Insert or replace one section on an existing page
  • Deployment history with restore of the previous version
  • Agency sync: inbound HMAC token over HTTPS; pull a template from another site; push stores a package for preview and never auto-applies

PHP files never enter a package. Zip entries are path-checked. Remote sync requires HTTPS unless you explicitly allow HTTP for local work.


Pars Design System

Agency brand layer for large Elementor sites. It does not rebuild Elementor Global Colors. Colours and typography stay in Site Settings (the kit). Pars reads, writes, monitors, and transfers that kit, then adds the tokens Elementor does not have (spacing, radius, size), reusable classes, widget style presets, brand locks, breakpoint drift, and fluid type with clamp().

Open Pars Elementor → Design System.

  • Tokens — spacing, radius, size, extra colour aliases, brand fonts. Kit-linked colour tokens are aliases of --e-global-color-{id}.
  • Reusable classes — compiled into one stylesheet; use them in Advanced → CSS Classes (pars-radius-md, pars-p-16, custom pars-ds-*).
  • Style presets — a class on the widget wrapper (Advanced → Design System). Not a copy of Elementor style controls.
  • Unified brand change — edit a Global Color here; every widget that already uses that global follows. Leftover hex values are visible in Usage / Safe Edit.
  • Usage — where each class, Global Color, font, or CSS variable appears (uses the Safe Edit index plus a JSON scan).
  • Unused — classes, tokens, and kit colours with no hits.
  • Brand rules — lock custom colours, fonts, spacing, and radius outside the Design System for Client Mode users or for all non-managers. Matching hex can be rewritten to the matching global on save. Off-scale padding snaps to spacing tokens when snap is on.
  • Client picker — restricted users only see style presets marked “Offer to clients”. Complements Client Mode.
  • Migrate — preview leftover hex and px spacing, then bind colours to kit globals and snap spacing/radius to tokens. Safe Edit snapshot first.
  • Style guide — publishes a WordPress page with a live shortcode so swatches and tokens stay in sync with the kit.
  • Transfer — JSON export/import between sites (kit colours, tokens, classes, presets, rules).
  • Breakpoints — Site Settings values are the source of truth; custom @media and settings for disabled devices are reported.
  • Fluid typography — clamp() scale between min/max viewports; optional write into kit Custom CSS.

Client Mode

Hand a finished Elementor site to the client without handing over the layout. Administrators stay unrestricted. Everyone else gets the intersection of their role policies.

Open Pars Elementor → Client Mode. Related screens: Publish requests (with a pending badge) and Edit history.

Delivery

  • Site-wide switch; off by default
  • Default content-only for non-administrators
  • Hide Style / Advanced unless the role is allowed
  • Prevent deleting elements
  • Field help next to common widgets (heading, text, image, button, and more)
  • Approval required before a restricted save goes live
  • Email reviewers when a client requests publish
  • Configurable history retention

Role presets

Preset What the role can do
Full Structure, style, publish, unlock
Content Text and images; request publish; no layout or delete
Locked Read-only in the editor

Per-role flags: edit text, edit images, edit structure, delete, add widgets, see style, see advanced, publish, request publish, unlock, edit locked, edit sensitive.

A Site client role (pars_client) is added for delivered sites: edit published pages/posts and upload files, nothing more.

Per-element locks (Advanced tab)

On every section, container, column, and widget:

  • Lock this element — clients cannot delete, move, or change its layout
  • Sensitive — even text and images stay read-only
  • Help shown to the client — copy next to the widget when they select it

The editor shows a delivery bar and outlines locked widgets in the preview.

Publish queue

Restricted saves write a pending revision, not the live document. Reviewers approve or reject from Publish requests. Approve applies the tree; reject drops it. A human-readable diff (added / changed / removed widgets) is stored in history without keeping the full JSON.

White label

Optional agency branding: name, logo, support URL/email, menu title, editor badge. Can hide plugin author links and Elementor marketing notices for restricted users.


Pars Review

Design feedback for agencies that build a site for a client. Share a link. The client does not need a WordPress account.

Open Pars Elementor → Pars Review, create a link for a published page, copy it once (the secret is not stored), and send it. The client opens the live page with ?pars_review=… and pins comments on a point.

This is not BPMS. Status on a pin is open / in progress / resolved. Final approval is a design sign-off. Assignees, due dates, SLAs, and multi-step organisational approvals belong to BPMS Elementor. Connect can still listen to review.commented, review.approved, and review.closed as one event → one action.

What it does

  • Review link without login (token stored hashed; shown once)
  • Pin a comment on a specific point (percent of the page, optional CSS path)
  • Separate comment sets for mobile and desktop (breakpoint in Review settings)
  • Status: open, in progress, resolved (agency changes status)
  • Image attachment (JPEG, PNG, GIF, WebP; files under uploads/pars-review, not the media library)
  • Page version captured on each comment (hash of Elementor JSON or post content + modified time). The overlay flags comments when the page has changed since
  • Client final design approval (optional lock of further comments)
  • Change report in admin, exportable as CSV
  • Time limit on the link (days; hourly expiry; 0 = until you close it)
  • White label on the overlay (agency name, logo, accent, hide “Pars Review”). Falls back to Client Mode branding when that is on

How to use

  1. Open Pars Elementor → Pars Review → New review link.
  2. Pick the published page, set expiry, and whether the client may comment, attach images, and approve.
  3. Copy the link immediately. If you lose it, use Replace link (the old URL stops working).
  4. The client clicks a point, writes a comment, optionally attaches a screenshot.
  5. You mark pins in progress or resolved from the overlay (while logged in as an administrator) or from the session screen.
  6. Export the change report when you need a record. Close or let the link expire when the review is done.

Row actions on Pages/Posts include Review link. The admin bar on a front-end page can open Pars Review.


Advanced Filter

Faceted catalogue filters for shops, directories, real estate, and industrial sites. Queries run against a dedicated facet index (pars_elementor_ft_docs, _facets, _tokens) — not a live WP_Query with tax_query / meta_query. Ajax Search stays a grouped live lookup; it is not the filter backend.

Open Pars Elementor → Advanced Filter, rebuild the index, then drop the Advanced Filter widget onto a page.

Index

  • Incremental reindex on post save, terms, product updates, ACF, and Meta Box
  • Full rebuild from the admin screen (batched)
  • Documents, inverted facet postings, and search tokens in custom tables
  • Remaining counts computed per facet after intersection

Widget

  • Ajax results with no full-page reload; first paint is server-rendered from the URL
  • Multi-step dependent facets (parent must be selected before the child appears)
  • Sources: public post types, each type’s taxonomies, WooCommerce attributes / price / stock, ACF, Meta Box, extra meta keys
  • Drag-and-drop order of filter items in the editor
  • Live result count, shareable pf_* query string, typo-tolerant search plus a synonym dictionary
  • Mobile sheet / drawer; desktop sidebar or filters-above-results

SEO

Admin policy for filtered URLs:

  • Noindex every filtered URL (default) — canonical stays on the clean page
  • Index simple combinations only (few facets, no search text, minimum results)
  • Index filtered URLs that meet the minimum result count (use with care)

Remote Data

A professional connector for REST APIs and JSON. Built for agencies and international catalogues, not casual page builders.

Open Pars Elementor → Remote Data, add a source, test the connection, then drop the Remote Data widget.

Sources

  • REST GET/POST or inline JSON stored in a dedicated table (pars_elementor_rd_sources)
  • Authentication: none, Bearer, Basic, API key in a header or query string
  • Secrets are encrypted with the site salts and never sent to Elementor or the public HTML
  • Items path (data.items, results, or empty if the root is an array), optional total path, optional remote page / per_page params
  • Per-source cache TTL, timeout, and fallback JSON
  • HTTPS only by default; optional host allowlist; private IPs, localhost, and cloud metadata hosts are blocked

Widget

  • Layouts: cards, table, chart (bar, line, pie, doughnut), Loop
  • Field mapping: title, excerpt, image, URL, label, value, date, extra columns
  • Search, sort, facet filters, and pagination through GET|POST /pars-elementor/v1/remote-data/query
  • If the API is down: stale cache, then fallback JSON, with a visible banner
  • Loop can render an Elementor template; Pars Remote Data dynamic tags (text, URL, image) bind any widget to the current item

Programmatic Pages

Data-driven landing pages for industrial catalogues, dealer locators, local services, and directories. This is not a tool for generating thousands of thin URLs. Quality gates are part of the product.

Open Pars Elementor → Programmatic Pages, add a page set, then:

  1. Connect CSV, Excel (.xlsx), a Remote Data API, or Google Sheets (Pars Connect service account)
  2. Choose one Elementor template. Bind widgets with Pars Programmatic Pages dynamic tags (text, URL, image) using column slugs
  3. Map columns onto slug, title, meta description, canonical, robots (index/noindex), and a unique key. An optional robots column can override the set default per row
  4. Optionally emit JSON-LD (LocalBusiness, Product, FAQPage) from mapped columns. Hub pages always emit CollectionPage + ItemList. Turn JSON-LD off if Yoast or Rank Math already prints the same type
  5. Optionally set a hub column (province, category). Each unique value gets a hub page. Bind Programmatic related pages, or use _hub.title / _hub.url on the text and URL tags
  6. Preview quality before anything is written. Incomplete, duplicate-key, near-duplicate, and thin rows cannot be published. Export a quality CSV from the set
  7. Apply as drafts or publish only rows that pa

This README is longer than the copy stored here. Read the rest on GitHub →