| 开发者 | rezabagheri |
|---|---|
| 更新时间 | 2026年7月13日 23:06 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPL-2.0+ |
| 版权网址: | 版权信息 |
[paradise_site_info] shortcode and Elementor Dynamic Tags. All widgets that display phone numbers, addresses, maps, social links, or business hours read from Site Info automatically.
Phone Link
A smart phone number widget that normalizes any input format and builds proper tel: or WhatsApp wa.me links. Supports icons, prefix text, multiple display formats, and flexible link scopes.
Phone Button
A styled CTA button that dials a phone number or opens WhatsApp. Full button customization with hover effects and responsive sizing.
Floating Call Button
A fixed-position call button that stays visible while users scroll. Includes position customization, pulse animation, label support, and breakpoint visibility.
Bottom Navigation Bar
A fully-featured mobile bottom navigation bar with responsive visibility, active state detection, badge support (including WooCommerce cart), speed dial, and a JavaScript hook system.
Author Card
A professional profile card displaying author information: photo, name, title, bio, custom meta fields, social links, and CTA button. Includes Schema.org Person markup for SEO.
Announcement Bar
A fixed full-width banner for announcements, promotions, or alerts. Supports icon, message, CTA button, and dismissal with session / days / permanent memory stored in localStorage.
Cookie Consent Bar
A GDPR/cookie consent bar with Accept and Decline buttons. Stores user choice in localStorage with configurable expiry. Dispatches paradise:consent:accepted and paradise:consent:declined events for analytics integration.
Back to Top
A fixed-position button that appears after scrolling past a configurable threshold and smoothly returns the user to the top of the page.
Off-Canvas Menu
A slide-in side panel with a WordPress menu. Triggered by an inline button or the Paradise.openOffCanvas() JavaScript API (useful with Bottom Nav JS Hooks).
Sticky Header
Place inside any Elementor section to make it sticky. Applies configurable scroll effects (shadow, background change, height shrink) after passing a scroll threshold.
Google Map
Embeds a Google Map via iframe. Source can be a Site Info address (Map URL field) or a manually entered URL. Supports Place and Directions modes, satellite/hybrid/terrain map types, zoom slider, border radius, and box shadow.
Social Links
A row or column of social media icon links. Source: Site Info socials or a custom repeater. Supports brand/uniform colors, lift/scale/color-shift hover animations, circle/rounded icon shapes, and icon-only/icon+label/label-only display modes.
Business Hours
Displays business hours from Site Info with a live Open Now / Closed badge. Highlights today's row. Supports 12 h and 24 h formats. The badge updates client-side using the site's timezone (independent of the visitor's browser timezone).
LocalBusiness Schema
An invisible widget that outputs Schema.org JSON-LD markup using Site Info data (name, phone, address, social sameAs, openingHoursSpecification). Supports 14 Schema.org business type subtypes. Helps Google display rich results (address, phone, hours).
FAQ Accordion
A collapsible Q&A list with accordion mode (one item open at a time) or multi-expand mode (any number open). Supports an Elementor icon picker for the open/closed state, left or right icon position, open-first-item default, and Schema.org FAQPage JSON-LD for Google rich results. Items can be entered statically in the widget or loaded from the FAQ Post Type.
Phone Link Features
tel:) or WhatsApp (wa.me/)Paradise.setBadge()Paradise.setBadge(id, count)document.addEventListener('ebn:hook:name', fn)paradise-widgets-for-elementor folder to /wp-content/plugins/.No. The free version of Elementor is sufficient. Elementor Pro is optional and unlocks Theme Builder support and Dynamic Tags on Pro controls.
Yes. The plugin is tested with Elementor 3.5 and above.
Site Info is a centralized store for your business data (phones, emails, addresses, social links, business hours). Configure it once and all widgets that need this data read from it automatically. It also provides a shortcode and Elementor Dynamic Tags.
Go to Google Maps, search for your location, click Share → Embed a map → copy the src URL from the iframe code. Paste it into the Site Info address "Map URL" field, or directly in the Google Map widget. The plugin normalizes most Google Maps URL formats automatically.
Use the public API: Paradise.setBadge('your-widget-css-id', count);
Setting count to 0 hides the badge. Count above 99 displays as "99+".
Set the Bottom Nav center button action to JS Hook and enter a hook name (e.g. openMenu). This fires the event ebn:hook:openMenu on the document. Listen for it and open the panel by its element ID:
document.addEventListener('ebn:hook:openMenu', function () { Paradise.toggleOffCanvas('your-offcanvas-id'); });
Yes. Set the badge type to WooCommerce Cart and it will display the live cart item count automatically.
The badge is computed in the visitor's browser using the site's timezone (from WordPress Settings → General). It does not depend on the visitor's device timezone, so it always reflects your business's local time.
A complete usage guide — every widget, its key controls, the JavaScript API, ready-made recipes, and a troubleshooting section — is available at: https://github.com/rezabagheri/paradise-widgets-for-elementor/blob/main/docs/USAGE.md
languages/paradise-widgets-for-elementor.pot (651 translatable strings)..wordpress-org/ — icon.svg (256×256), icon-256x256.png / icon-128x128.png, banner-772x250.svg / banner-1544x500.svg plus PNG exports, and a README documenting the SVN deployment mapping.label, label_on, label_off, description, placeholder, title) across widgets/, admin/, and includes/ are now wrapped in __() so they're picked up by wp i18n make-pot and translatable.Paradise_EW_Admin widget and feature registries refactored from static array properties to static methods so __() calls are valid inside them (PHP forbids function calls in static property initialisers). Public API (get_widget_registry() / get_feature_registry()) unchanged.Location %d placeholder in Site Info now carries a /* translators: */ comment.+CC prefix. The shared phone helper now carries a built-in ITU-T E.164 country-code table (~120 entries) and detects the embedded cc from inputs like +37493583161 (Armenia) before the strip-and-format pipeline runs.Paradise_Widget_Base::render_editor_placeholder( string $hint ) shared helper.paradise-elementor-widgets to paradise-widgets-for-elementor. No data migration required.Tested up to: 6.9 in the plugin header.date, time, email, number, color, range. Date and time render via WordPress's site-wide date_format / time_format by default. Number uses FILTER_VALIDATE_INT (rejects '1.5' rather than truncating). Color validates #RRGGBB. Range is an open-bounded integer pair (Min,Max) — pick any integers; sanitize swaps endpoints if out of order.el_category in the type registry — email is the first type whose Elementor dynamic-tag binding is multi-category (appears in both TEXT and URL dropdowns so it can populate Heading text AND a Button URL as mailto:).eicon-cookie doesn't exist in Elementor's icon font; replaced with eicon-info-circle so the widget shows an icon in the editor's widget panel.[paradise_field key="…"] shortcode and three Elementor Dynamic Tags (Text / URL / Image). First types: text, textarea, url, image. Storage in paradise_custom_fields option. Type registry is filterable via paradise_custom_field_types for site-level extension.example and default (per-widget enabled-by-default state). Companion CSS at assets/css/feature-card-example.css.[paradise_site_info ...] shortcode to the clipboard. Click feedback: green checkmark icon swap plus a "Copied!" toast above the button.<select> on the Site Info page (Instagram, Facebook, X, LinkedIn, YouTube, TikTok, Pinterest, Snapchat, Threads, WhatsApp). Updates live when the platform changes. New helper Paradise_Site_Info::social_icon_svg().beforeunload warning blocks accidental navigation. Clears on save.<style> block moved to assets/css/admin.css.admin.js now enqueued alongside admin.css on every Paradise admin page. Page detection uses a prefix check so new submenu pages get the assets automatically.*.test domains). navigator.clipboard is only defined in secure contexts; falls back to a temporary <textarea> + document.execCommand('copy') so the button works regardless of HTTPS. Red "Copy failed" toast surfaces if both paths fail.https://google.com/maps/embed URL before pointing the iframe at it.enqueue_assets() reduced from ~170 hardcoded calls to a single loop over Paradise_EW_Admin::$widget_registry. Adding a new widget no longer requires editing the main plugin file.paradise-{slug} for both CSS and JS of each widget (no more mixed -style / -script suffixes).mixed parameter types and typed properties).paradise-bn-bottom-nav-style / -script while the main file registered paradise-bottom-nav-style / -script; the mismatch meant nothing loaded.get_uwidget_type() method (typo of a non-existent Elementor method that was never called).grid-template-rows: minmax(0, 0fr) overrides the implicit min-content track sizing).TypeError on templates where elementorFrontend.hooks is not yet ready (e.g. elementor_canvas); the editor re-init now checks both elementorFrontend and .hooks before calling addAction.apply_filters('the_content', …) being called inside widget render