{"id":331356,"date":"2026-07-06T12:23:11","date_gmt":"2026-07-06T12:23:11","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/landtech-extras-for-elementor\/"},"modified":"2026-07-09T16:05:09","modified_gmt":"2026-07-09T16:05:09","slug":"landtech-extras-for-elementor","status":"publish","type":"plugin","link":"https:\/\/he.wordpress.org\/plugins\/landtech-extras-for-elementor\/","author":12029770,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.4.4","stable_tag":"2.4.4","tested":"7.0.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"LandTech Extras for Elementor","header_author":"brelandr","header_description":"Free Elementor widgets and extensions \u2014 distributed on WordPress.org; updates via the WordPress dashboard only.","assets_banners_color":"283b6c","last_updated":"2026-07-09 16:05:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/landtechwebdesigns.com\/","header_author_uri":"https:\/\/profiles.wordpress.org\/brelandr\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":254,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.2.100":{"tag":"2.2.100","author":"brelandr","date":"2026-07-07 03:34:05"},"2.2.75":{"tag":"2.2.75","author":"brelandr","date":"2026-07-06 12:22:42"},"2.2.76":{"tag":"2.2.76","author":"brelandr","date":"2026-07-06 14:35:07"},"2.2.77":{"tag":"2.2.77","author":"brelandr","date":"2026-07-06 14:36:35"},"2.2.78":{"tag":"2.2.78","author":"brelandr","date":"2026-07-06 14:53:43"},"2.2.79":{"tag":"2.2.79","author":"brelandr","date":"2026-07-06 17:04:56"},"2.2.80":{"tag":"2.2.80","author":"brelandr","date":"2026-07-06 17:20:31"},"2.2.81":{"tag":"2.2.81","author":"brelandr","date":"2026-07-06 17:28:16"},"2.2.82":{"tag":"2.2.82","author":"brelandr","date":"2026-07-06 17:44:16"},"2.2.83":{"tag":"2.2.83","author":"brelandr","date":"2026-07-06 17:52:58"},"2.2.84":{"tag":"2.2.84","author":"brelandr","date":"2026-07-06 18:03:20"},"2.2.85":{"tag":"2.2.85","author":"brelandr","date":"2026-07-06 18:55:36"},"2.2.98":{"tag":"2.2.98","author":"brelandr","date":"2026-07-07 03:22:18"},"2.2.99":{"tag":"2.2.99","author":"brelandr","date":"2026-07-07 03:28:58"},"2.4.0":{"tag":"2.4.0","author":"brelandr","date":"2026-07-08 16:07:44"},"2.4.4":{"tag":"2.4.4","author":"brelandr","date":"2026-07-09 16:05:09"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3598192,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3598192,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3598192,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3598192,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3601726,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"elementor\"}},{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"landtech-extras-for-elementor\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n$seeder = WP_PLUGIN_DIR . '\\\/landtech-extras-for-elementor\\\/includes\\\/playground-demo-seeder.php';\\nif ( is_readable( $seeder ) ) {\\n\\trequire_once $seeder;\\n\\tlandtech_extras_seed_playground_demos();\\n}\\necho 'landtech-extras-demos-seeded';\"}]}"}},"all_blocks":[],"tagged_versions":["2.2.100","2.2.75","2.2.76","2.2.77","2.2.78","2.2.79","2.2.80","2.2.81","2.2.82","2.2.83","2.2.84","2.2.85","2.2.98","2.2.99","2.4.0","2.4.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3597920,"resolution":"1","location":"assets","locale":"","width":1280,"height":720},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3597920,"resolution":"2","location":"assets","locale":"","width":1280,"height":720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3597920,"resolution":"3","location":"assets","locale":"","width":1280,"height":720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3597920,"resolution":"4","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"Enable or disable individual LandTech Extras widgets from Elementor \u2192 LandTech Extras.","2":"Editor extensions such as display conditions, sticky elements, parallax, and tooltips.","3":"Optional API keys for Google Maps, Snazzy Maps, Instagram, and BYOK LLM credentials.","4":"LandTech Extras widgets appear in the Elementor panel under the LandTech Extras category."}},"plugin_section":[],"plugin_tags":[15438,76538,2763,1084,241],"plugin_category":[43],"plugin_contributors":[251791],"plugin_business_model":[],"class_list":["post-331356","plugin","type-plugin","status-publish","hentry","plugin_tags-addons","plugin_tags-elementor","plugin_tags-extensions","plugin_tags-page-builder","plugin_tags-widgets","plugin_category-customization","plugin_contributors-brelandr","plugin_committers-brelandr"],"banners":{"banner":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/banner-772x250.png?rev=3598192","banner_2x":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/banner-1544x500.png?rev=3598192","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/icon-128x128.png?rev=3598192","icon_2x":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/icon-256x256.png?rev=3598192","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/screenshot-1.png?rev=3597920","caption":"Enable or disable individual LandTech Extras widgets from Elementor \u2192 LandTech Extras."},{"src":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/screenshot-2.png?rev=3597920","caption":"Editor extensions such as display conditions, sticky elements, parallax, and tooltips."},{"src":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/screenshot-3.png?rev=3597920","caption":"Optional API keys for Google Maps, Snazzy Maps, Instagram, and BYOK LLM credentials."},{"src":"https:\/\/ps.w.org\/landtech-extras-for-elementor\/assets\/screenshot-4.png?rev=3597920","caption":"LandTech Extras widgets appear in the Elementor panel under the LandTech Extras category."}],"raw_content":"<!--section=description-->\n<p><strong>Disclaimer:<\/strong> Independent fork of the original <strong>Elementor Extras<\/strong> plugin (also known as <strong>Extras for Elementor<\/strong>, by Namogo). Not affiliated with or endorsed by Namogo or Elementor Ltd. Original credits: Namogo (Elementor Extras). Maintained by Land Tech Web Designs.<\/p>\n\n<p><strong>LandTech Extras for Elementor<\/strong> is a free, actively maintained replacement for sites that relied on Elementor Extras \/ Extras for Elementor. It adds creative <strong>Elementor widgets<\/strong> (gallery, calendar, Google Map, posts grids, navigation, popups, and more) and <strong>editor extensions<\/strong> (display conditions, parallax, sticky elements, tooltips) on top of Elementor. Existing Elementor templates that used Elementor Extras widget slugs (for example <code>ee-calendar<\/code>, <code>posts-extra<\/code>, <code>ee-gallery<\/code>) continue to work after you switch to this plugin.<\/p>\n\n<p>Configure optional API keys (Google Maps, Snazzy Maps, Instagram, and optional bring-your-own-key LLM credentials when using the separate <strong>LandTech Extras add-on<\/strong> AI workspace) under <strong>Elementor \u2192 LandTech Extras \u2192 APIs<\/strong> when needed.<\/p>\n\n<h3>Widgets and extensions<\/h3>\n\n<p>Find widgets in the Elementor panel under the <strong>LandTech Extras for Elementor<\/strong> category. Widget type slugs match the upstream Elementor Extras fork for easier migration.<\/p>\n\n<p><strong>Widgets:<\/strong> Age Gate (<code>ee-age-gate<\/code>), Audio Player (<code>ee-audio-player<\/code>), Breadcrumbs (<code>ee-breadcrumbs<\/code>, optional <strong>BreadcrumbList<\/strong> JSON-LD when <strong>Structured data<\/strong> is enabled), Buttons \/ Button Group (<code>button-group<\/code>), Calendar (<code>ee-calendar<\/code>), Circle Progress (<code>circle-progress<\/code>), Devices (<code>devices-extended<\/code>), FAQ Schema (<code>ee-faq-schema<\/code>), Gallery (<code>gallery-extra<\/code>), Gallery Slider (<code>gallery-slider<\/code>), Google Map (<code>ee-google-map<\/code>), Heading Extra (<code>heading-extended<\/code>), Hotspots (<code>hotspots<\/code>), HTML5 Video Player (<code>html5-video<\/code>), Image Comparison (<code>image-comparison<\/code>), Inline SVG (<code>ee-inline-svg<\/code>), Lottie (<code>ee-lottie<\/code>), Offcanvas (<code>ee-offcanvas<\/code>), Popup (<code>ee-popup<\/code>), Posts Extra \/ Portfolio \/ Carousel layouts (<code>posts-extra<\/code>), Random Image (<code>ee-random-image<\/code>), Scroll Indicator (<code>ee-scroll-indicator<\/code>), Search Form (<code>ee-search-form<\/code>), Slide Menu (<code>ee-slide-menu<\/code>), Switcher (<code>ee-switcher<\/code>), Table (<code>table<\/code>), Text Divider (<code>text-divider<\/code>), Timeline (<code>timeline<\/code>), Toggle Element (<code>ee-toggle-element<\/code>), Unfold (<code>unfold<\/code>).<\/p>\n\n<p><strong>Editor extensions<\/strong> (Advanced tab on Elementor elements): Display Conditions (free: time, day, URL\/query vars including UTM presets, cookie, business hours; WooCommerce purchase history and membership rules ship in the separate <strong>LandTech Extras Premium<\/strong> add-on), Parallax Background, Parallax Elements, Portfolio Parallax, Sticky Elements, Tooltips.<\/p>\n\n<p>Disable unused widgets under <strong>Elementor \u2192 LandTech Extras \u2192 Widgets<\/strong> to speed up the editor.<\/p>\n\n<h3>Try It Live - Preview This Plugin Instantly<\/h3>\n\n<p>Experience LandTech Extras for Elementor without installation: the blueprint installs <strong>Elementor<\/strong> and this plugin from <strong>WordPress.org<\/strong>, seeds <strong>sample images and blog posts<\/strong>, builds a <strong>demo homepage<\/strong> with links to every widget, creates a <strong>dedicated demo page per feature<\/strong> (gallery, search form, posts grid, maps, navigation widgets, and more), and registers a <strong>navigation menu<\/strong> grouping all demos. Log in as <strong>admin<\/strong> \/ <strong>password<\/strong> to edit pages with Elementor or open <strong>Elementor \u2192 LandTech Extras<\/strong> settings.<\/p>\n\n<p><a href=\"https:\/\/playground.wordpress.net\/?blueprint-url=https:\/\/plugins.svn.wordpress.org\/landtech-extras-for-elementor\/assets\/blueprints\/blueprint.json\">Preview on WordPress Playground<\/a><\/p>\n\n<p>The same blueprint ships in the plugin package as <code>blueprint.json<\/code> (repository root) and <code>assets\/blueprints\/blueprint.json<\/code>. WordPress.org serves the public copy from <strong>plugin SVN<\/strong> at <code>assets\/blueprints\/blueprint.json<\/code> for directory Live Preview integration.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin may cause the site, the WordPress admin, or the Elementor editor to contact third-party services when you enable the related features or save API credentials. For each service below, direct links to its <strong>Terms of Service<\/strong> (or equivalent) and <strong>Privacy Policy<\/strong> are provided.<\/p>\n\n<p><strong>Google Maps Platform (Google LLC)<\/strong><\/p>\n\n<p>When you enable the Google Map widget or turn on <strong>Load Google Maps API<\/strong> under Elementor \u2192 LandTech Extras \u2192 APIs, visitors\u2019 browsers may load the Maps JavaScript API from Google (<code>maps.googleapis.com<\/code>, including via bundled <code>assets\/lib\/gmap3\/gmap3.js<\/code>). Requests can include the <strong>Maps API key<\/strong> you enter in settings, map coordinates or place queries you configure, and typical browser HTTP metadata. <a href=\"https:\/\/cloud.google.com\/maps-platform\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>OpenStreetMap tile servers (OpenStreetMap Foundation and community tile providers)<\/strong><\/p>\n\n<p>When you set the Google Map widget <strong>Map provider<\/strong> to <strong>OpenStreetMap<\/strong>, visitors\u2019 browsers load bundled <strong>Leaflet<\/strong> (<code>assets\/lib\/leaflet\/<\/code>) and request raster map tiles from OpenStreetMap\u2019s tile service (<code>tile.openstreetmap.org<\/code>, including subdomains <code>a<\/code>\u2013<code>c<\/code>). Requests can include map tile coordinates (zoom level and x\/y indices), the visitor\u2019s IP address, and standard browser HTTP metadata. Marker icon assets are served from your site; no API key is required for the default tile layer. <a href=\"https:\/\/wiki.osmfoundation.org\/wiki\/Terms_of_Use\">OpenStreetMap Foundation Terms<\/a> \u00b7 <a href=\"https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy\">OpenStreetMap Foundation Privacy Policy<\/a> \u00b7 <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap copyright<\/a><\/p>\n\n<p><strong>Snazzy Maps (snazzymaps.com; operated by Atlist Inc.)<\/strong><\/p>\n\n<p>When you add a Snazzy Maps API key and search for map styles in the Elementor editor, the editor script (<code>assets\/js\/editor.js<\/code>) requests JSON from <code>https:\/\/snazzymaps.com\/{endpoint}.json<\/code> (explore, my-styles, or favorites). Those requests can include your <strong>Snazzy Maps API key<\/strong>, pagination parameters, and standard browser HTTP metadata. Server-side PHP does not proxy these editor requests. Atlist publishes the legal terms that apply to Snazzy Maps \/ Atlist services: <a href=\"https:\/\/www.atlist.com\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/www.atlist.com\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>Instagram (Meta Platforms, Inc.)<\/strong><\/p>\n\n<p>When you use Instagram-related options (Gallery widget Instagram source or an access token under Elementor \u2192 LandTech Extras \u2192 APIs), the plugin may request data from <strong>Instagram Graph API<\/strong> (<code>graph.instagram.com<\/code>, including token refresh in admin) and\/or <strong>instagram.com<\/strong> endpoints used by the Gallery widget. Data sent can include the <strong>access token<\/strong> you configure, API parameters required by Instagram, and standard HTTP metadata. <a href=\"https:\/\/www.instagram.com\/legal\/terms\/\">Instagram Terms of Service<\/a> \u00b7 <a href=\"https:\/\/privacycenter.instagram.com\/policy\/\">Instagram Privacy Policy<\/a> \u00b7 <a href=\"https:\/\/www.facebook.com\/privacy\/policy\/\">Meta Privacy Policy<\/a> \u00b7 Meta <strong>Developer Terms<\/strong> (API use): <a href=\"https:\/\/developers.facebook.com\/terms\/\">Terms<\/a><\/p>\n\n<p><strong>OpenAI (OpenAI, LLC) \u2014 optional bring-your-own-key (separate LandTech Extras add-on AI workspace)<\/strong><\/p>\n\n<p>This WordPress.org build may store optional API credentials in the <code>landtech_extras_apis<\/code> option when you save settings, but <strong>does not<\/strong> call OpenAI from this plugin alone. When the separate <strong>LandTech Extras add-on<\/strong> is active, AI workspace is enabled, and you choose <strong>OpenAI<\/strong>, that add-on may send HTTPS requests to <strong>OpenAI\u2019s API<\/strong> (e.g. <code>api.openai.com<\/code>) with the <strong>API key<\/strong>, <strong>prompt or content<\/strong>, model parameters, and standard HTTP metadata. <a href=\"https:\/\/openai.com\/policies\/terms-of-use\/\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/privacy-policy\/\">Privacy Policy<\/a><\/p>\n\n<p><strong>Anthropic (Anthropic, PBC) \u2014 optional bring-your-own-key (add-on AI workspace)<\/strong><\/p>\n\n<p>Same as OpenAI above: credentials may be stored here; outbound <strong>Anthropic API<\/strong> requests (e.g. <code>api.anthropic.com<\/code>) occur only when the separate add-on AI workspace invokes them with your saved <strong>Anthropic API key<\/strong>, messages, and parameters. <a href=\"https:\/\/www.anthropic.com\/legal\/commercial-terms\">Commercial Terms of Service<\/a> \u00b7 <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy Policy<\/a><\/p>\n\n<p><strong>Google Gemini API (Google LLC) \u2014 optional bring-your-own-key (add-on AI workspace)<\/strong><\/p>\n\n<p>Same as OpenAI above: credentials may be stored here; outbound <strong>Gemini<\/strong> requests (e.g. <code>generativelanguage.googleapis.com<\/code>) occur only when the separate add-on AI workspace invokes them with your saved <strong>Gemini API key<\/strong>, prompts, and parameters. <a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">Google AI \/ Gemini API Terms<\/a> \u00b7 <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy Policy<\/a><\/p>\n\n<p><strong>User-provided Lottie animation URLs (LottieFiles or other hosts)<\/strong><\/p>\n\n<p>When the Lottie widget is set to load an animation from an <strong>External URL<\/strong> (or from a JSON file in your media library served from another origin), visitors\u2019 browsers request that JSON from the URL you configure. The Playground demo may load a sample file from <strong>LottieFiles<\/strong> (<code>assets*.lottiefiles.com<\/code>) when you preview the bundled demo page. No animation URL is transmitted to Land Tech servers. Review your animation host\u2019s terms and privacy policy before publishing.<\/p>\n\n<h3>Third-party libraries<\/h3>\n\n<p>This plugin bundles or references third-party scripts. Licenses and upstream sources for every bundled file are noted below. Full provenance details are in the matching <code>README.txt<\/code> files under <code>assets\/lib\/<\/code>.<\/p>\n\n<p><strong>anime.js 4.0.2<\/strong> (MIT) \u2014 <code>assets\/lib\/anime\/anime.js<\/code> \/ <code>anime.min.js<\/code>\nSource: https:\/\/github.com\/juliangarnier\/anime \u2014 License notes: <code>assets\/lib\/anime\/README.txt<\/code>.<\/p>\n\n<p><strong>Splitting.js 1.0.6<\/strong> (MIT) \u2014 <code>assets\/lib\/splitting\/splitting.js<\/code> \/ <code>splitting.min.js<\/code> \/ <code>splitting.css<\/code>\nSource: https:\/\/github.com\/shshaw\/Splitting \u2014 License notes: <code>assets\/lib\/splitting\/README.txt<\/code>.<\/p>\n\n<p><strong>GLightbox 3.3.1<\/strong> (MIT) \u2014 <code>assets\/lib\/glightbox\/js\/glightbox.js<\/code> \/ <code>glightbox.min.js<\/code> and CSS under <code>assets\/lib\/glightbox\/css\/<\/code>\nSource: https:\/\/github.com\/biati-digital\/glightbox \u2014 License notes: <code>assets\/lib\/glightbox\/README.txt<\/code>.<\/p>\n\n<p><strong>jquery-circle-progress<\/strong> (MIT) \u2014 https:\/\/github.com\/kottenator\/jquery-circle-progress\n<strong>jquery.appear<\/strong> (MIT) \u2014 https:\/\/github.com\/morr\/jquery.appear\/\n<strong>LongShadow jQuery Plugin<\/strong> (MIT) \u2014 https:\/\/github.com\/dangvanthanh\/jquery.longShadow\n<strong>HC-Sticky<\/strong> (MIT) \u2014 https:\/\/github.com\/somewebmedia\/hc-sticky\n<strong>jQuery Mobile<\/strong> (MIT\/jquery.org) \u2014 https:\/\/jquerymobile.com\/\n<strong>jquery-visible<\/strong> (MIT) \u2014 http:\/\/teamdf.com\/jquery-plugins\/license\/\n<strong>Parallax Background<\/strong> (MIT) \u2014 https:\/\/github.com\/erensuleymanoglu\/parallax-background\n<strong>TableSorter<\/strong> v2.32.0 (MIT\/GPL dual, Mottie fork) \u2014 https:\/\/github.com\/Mottie\/tablesorter\n<strong>Isotope v3.0.6<\/strong> (GPLv3) \u2014 <code>assets\/lib\/isotope\/<\/code> standalone modules (WordPress core jQuery via jquery-bridget)\n<strong>Metafizzy \/ Desandro layout dependencies<\/strong> (MIT unless noted) \u2014 <code>assets\/lib\/jquery-bridget\/<\/code>, <code>outlayer\/<\/code>, <code>ev-emitter\/<\/code>, <code>get-size\/<\/code>, <code>fizzy-ui-utils\/<\/code>, <code>matches-selector\/<\/code>, <code>masonry-layout\/<\/code> (each folder includes <code>README.txt<\/code>)\n<strong>Packery v2.1.2<\/strong> (GPLv3) \u2014 <code>assets\/lib\/packery\/<\/code> standalone modules (WordPress core jQuery via jquery-bridget)\n<strong>Infinite Scroll 4.0.1<\/strong> (GPLv3) \u2014 <code>assets\/lib\/infinite-scroll\/infinite-scroll.js<\/code> (core build; vanilla DOM API via <code>new InfiniteScroll()<\/code>; no jquery-bridget)\nSource: https:\/\/infinite-scroll.com \u2014 License notes: <code>assets\/lib\/infinite-scroll\/README.txt<\/code>.\n<strong>javascript-detect-element-resize<\/strong> (MIT) \u2014 https:\/\/github.com\/sdecima\/javascript-detect-element-resize\n<strong>tilt.js<\/strong> (MIT) \u2014 https:\/\/github.com\/gijsroge\/tilt.js\n<strong>Schedule-X Calendar 4.6.1<\/strong> (MIT) \u2014 <code>assets\/lib\/schedule-x\/<\/code> with Preact under <code>assets\/lib\/preact\/<\/code> and <code>@js-temporal\/polyfill<\/code> under <code>assets\/lib\/temporal-polyfill\/<\/code>\nSource: https:\/\/github.com\/schedule-x\/schedule-x \u2014 License notes: <code>assets\/lib\/schedule-x\/README.txt<\/code>.\n<strong>@lottiefiles\/lottie-player<\/strong> (MIT) \u2014 <code>assets\/lib\/lottie-player\/lottie-player.js<\/code>\nSource: https:\/\/github.com\/LottieFiles\/lottie-player \u2014 License notes: <code>assets\/lib\/lottie-player\/README.txt<\/code>.\n<strong>WaveSurfer.js 7.9.9<\/strong> (BSD-3-Clause) \u2014 optional Audio Player waveform skin\nSource: https:\/\/github.com\/kwavesurfer\/wavesurfer.js \u2014 License notes: <code>assets\/lib\/wavesurfer\/README.txt<\/code>.\n<strong>GMAP3<\/strong> (GPL-3.0+) \u2014 http:\/\/gmap3.net\n<strong>Leaflet<\/strong> v1.9.4 (BSD-2-Clause) \u2014 <code>assets\/lib\/leaflet\/leaflet.js<\/code> \/ <code>leaflet.css<\/code> (OpenStreetMap map provider)\nSource: https:\/\/github.com\/Leaflet\/Leaflet \u2014 License notes: <code>assets\/lib\/leaflet\/README.txt<\/code>.\n<strong>Slidebars<\/strong> (MIT) \u2014 http:\/\/www.adchsm.com\/slidebars\/<\/p>\n\n<p>Date\/time formatting in the Calendar widget uses <strong>Moment.js<\/strong> registered by WordPress core when available.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Human-readable source for bundled\/minified assets (included in this plugin package):<\/p>\n\n<ul>\n<li><code>assets\/css\/frontend.min.css<\/code> and <code>assets\/css\/frontend-rtl.min.css<\/code> \u2014 built from <code>assets\/css\/frontend.css<\/code> and <code>assets\/css\/frontend-rtl.css<\/code>.<\/li>\n<li><code>assets\/js\/frontend.min.js<\/code> \u2014 built from <code>assets\/js\/frontend.js<\/code>.<\/li>\n<li><code>assets\/js\/landtech-extras-calendar-schedule-x.js<\/code> and <code>assets\/js\/table-csv-editor.js<\/code> \u2014 widget helpers (not minified; loaded directly when needed).<\/li>\n<li><code>assets\/js\/admin.min.js<\/code>, <code>assets\/js\/editor.min.js<\/code>, and <code>assets\/js\/notice.min.js<\/code> \u2014 built from their matching non-minified files in <code>assets\/js\/<\/code>.<\/li>\n<li><code>assets\/css\/admin.min.css<\/code>, <code>assets\/css\/editor.min.css<\/code>, and <code>assets\/css\/editor-preview.min.css<\/code> \u2014 built from matching non-minified CSS in <code>assets\/css\/<\/code>.<\/li>\n<li>Widget\/library <code>.min.js<\/code> \/ <code>.min.css<\/code> under <code>assets\/lib\/<\/code> \u2014 non-minified counterparts ship in the same folder where applicable; third-party-only bundles are documented under <strong>Third-party libraries<\/strong> above and in the per-library <code>README.txt<\/code> files under <code>assets\/lib\/<\/code>.<\/li>\n<li><code>assets\/lib\/landtech-extras-anime-helpers.js<\/code> \u2014 TweenMax-compatible animation shim using bundled anime.js (MIT).<\/li>\n<\/ul>\n\n<p>From the plugin root, after <strong><code>npm install<\/code><\/strong>, run <strong><code>npm run build:assets<\/code><\/strong> to regenerate the minified frontend CSS\/JS files listed above (used by default enqueues when <code>SCRIPT_DEBUG<\/code> is false).<\/p>\n\n<p>Before publishing a public GitHub mirror, verify any <strong>Repository<\/strong> or <strong>Source<\/strong> URL in this readme returns HTTP 200 (WordPress.org reviewers check linked URLs).<\/p>\n\n<h3>Support<\/h3>\n\n<p>For add-on purchases, feature requests, and bug reports, email <strong>sales@landtechwebdesigns.com<\/strong> or use the contact options on <a href=\"https:\/\/landtechwebdesigns.com\/\">Land Tech Web Designs<\/a>.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>Developed by <strong>Land Tech Web Designs, Corp.<\/strong><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate <strong>Elementor<\/strong>.<\/li>\n<li>Install and activate <strong>LandTech Extras for Elementor<\/strong> from this directory or from WordPress.org once published.<\/li>\n<li>Edit pages with Elementor and use <strong>LandTech Extras for Elementor<\/strong> widgets and extensions.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20elementor%3F\"><h3>Does this plugin require Elementor?<\/h3><\/dt>\n<dd><p>Yes. LandTech Extras for Elementor requires the free <a href=\"https:\/\/wordpress.org\/plugins\/elementor\/\">Elementor<\/a> page builder to be installed and active.<\/p><\/dd>\n<dt id=\"which%20elementor%20version%20is%20required%3F\"><h3>Which Elementor version is required?<\/h3><\/dt>\n<dd><p>Elementor 3.5.0 or later. Compatibility is documented in the plugin header (<code>Elementor tested up to<\/code>).<\/p><\/dd>\n<dt id=\"can%20i%20use%20this%20without%20elementor%20pro%3F\"><h3>Can I use this without Elementor Pro?<\/h3><\/dt>\n<dd><p>Yes. All free widgets and extensions work without Elementor Pro. Some widgets note when Elementor Pro is required.<\/p><\/dd>\n<dt id=\"how%20do%20i%20disable%20widgets%20i%20don%27t%20use%3F\"><h3>How do I disable widgets I don't use?<\/h3><\/dt>\n<dd><p>Go to <strong>Elementor \u2192 LandTech Extras<\/strong> in your WordPress admin and uncheck any widgets or extensions you don't plan to use. This improves Elementor editor load time.<\/p><\/dd>\n<dt id=\"how%20do%20i%20get%20an%20api%20key%20for%20google%20maps%3F\"><h3>How do I get an API key for Google Maps?<\/h3><\/dt>\n<dd><p>Follow the <a href=\"https:\/\/developers.google.com\/maps\/documentation\/javascript\/get-api-key\">Google Maps API key guide<\/a> and enter your key under <strong>Elementor \u2192 LandTech Extras \u2192 APIs<\/strong>.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20affiliated%20with%20namogo%20or%20elementor%20ltd.%3F\"><h3>Is this plugin affiliated with Namogo or Elementor Ltd.?<\/h3><\/dt>\n<dd><p>No. This is an independent fork of the original Elementor Extras plugin by Namogo, maintained by Land Tech Web Designs. It is not affiliated with or endorsed by Namogo or Elementor Ltd.<\/p><\/dd>\n<dt id=\"is%20this%20a%20replacement%20for%20elementor%20extras%20%2F%20extras%20for%20elementor%3F\"><h3>Is this a replacement for Elementor Extras \/ Extras for Elementor?<\/h3><\/dt>\n<dd><p>Yes. LandTech Extras for Elementor is an independent, GPLv3-maintained continuation of the Elementor Extras (Extras for Elementor) widget set. It is intended for sites that need those Elementor widgets and extensions without relying on the discontinued original distribution. Widget type slugs (<code>ee-calendar<\/code>, <code>posts-extra<\/code>, and similar) are preserved so existing Elementor JSON templates can load after you deactivate the old plugin and activate LandTech Extras.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20from%20elementor%20extras%20or%20namogo%20extras%3F\"><h3>Can I migrate from Elementor Extras or Namogo Extras?<\/h3><\/dt>\n<dd><p>In most cases, yes. Export your Elementor templates, replace the old plugin with <strong>LandTech Extras for Elementor<\/strong>, and re-open pages in Elementor. Widgets should resolve under the LandTech Extras category. Re-save pages if Elementor prompts you to update data. Compare your widget list with the <strong>Widgets and extensions<\/strong> section above; optional API keys (Maps, Instagram) must be re-entered under <strong>Elementor \u2192 LandTech Extras \u2192 APIs<\/strong>.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20include%20gutenberg%20blocks%3F\"><h3>Does this plugin include Gutenberg blocks?<\/h3><\/dt>\n<dd><p>No. LandTech Extras adds <strong>Elementor<\/strong> widgets and Elementor editor extensions only. Search terms like \u201cElementor blocks\u201d usually refer to Elementor widgets or sections; this plugin does not register WordPress block editor blocks.<\/p><\/dd>\n<dt id=\"what%20prefix%20does%20this%20plugin%20use%20in%20code%3F\"><h3>What prefix does this plugin use in code?<\/h3><\/dt>\n<dd><p>PHP functions, hooks, options, and transients use the <strong><code>landtech_extras_<\/code><\/strong> or <strong><code>ltxe_<\/code><\/strong> prefix (four or more characters). Script\/style handles use <strong><code>landtech-extras-<\/code><\/strong>. Namespaced PHP classes live under <strong><code>LandTechExtras\\<\/code><\/strong>. Elementor widget type slugs (for example <code>ee-calendar<\/code> or <code>posts-extra<\/code>) are retained from the upstream Elementor Extras fork so existing Elementor templates keep working; they are Elementor element identifiers, not WordPress options or hooks.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.4.4<\/h4>\n\n<ul>\n<li>Fix: Ship <code>assets\/js\/viewport-bridge.js<\/code> with the free plugin so Premium viewport display conditions no longer 404 the script on frontend.<\/li>\n<li>Add: Viewport display condition (mobile\/tablet\/desktop) and breakpoint helpers for WordPress 7.0+ visibility bridge.<\/li>\n<\/ul>\n\n<h4>2.4.3<\/h4>\n\n<ul>\n<li>Fix: Tooltip extension no longer triggers PHP warnings when <code>tooltip_enable<\/code> is unset on a widget.<\/li>\n<li>Fix: Posts and Timeline widgets load <code>Posts_Base<\/code> before class declaration to prevent fatal errors on frontend.<\/li>\n<li>Fix: Widget registration loads class files before calling static methods, preventing fatals for FAQ Schema and other widgets.<\/li>\n<li>Fix: Autoloader uses <code>require_once<\/code> for reliable class loading.<\/li>\n<li>Improved: Zip build verifies <code>posts-base.php<\/code>, <code>faq-schema.php<\/code>, and <code>schema-validator.php<\/code> are included in releases.<\/li>\n<\/ul>\n\n<h4>2.4.2<\/h4>\n\n<ul>\n<li>Fix: Activation redirect and version-tracking options use <code>autoload = no<\/code> to avoid loading one-shot flags on every request.<\/li>\n<\/ul>\n\n<h4>2.4.1<\/h4>\n\n<ul>\n<li>Remove: <strong>CLNDR<\/strong> library and legacy calendar markup\/CSS after Schedule-X migration.<\/li>\n<li>Fix: Calendar widget wires <strong>First Day<\/strong>, <strong>Earliest\/Latest Month<\/strong>, and <strong>Default Month<\/strong> settings to Schedule-X.<\/li>\n<li>Remove: Dead Elementor style controls for CLNDR-era navigation, header, days, and compact event list UI.<\/li>\n<li>Improved: <strong>Organization<\/strong> schema validation (dedicated rules when @type is Organization).<\/li>\n<li>Add: Shared <code>Schema_Builder<\/code> helpers for <strong>Organization<\/strong> and <strong>Event<\/strong> JSON-LD (consumed by Premium Schema Suite).<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>Fix: <strong>Unfold widget<\/strong> \u2014 anime.js v4 timeline and height animations work again via updated GSAP shim.<\/li>\n<li>Fix: <strong>Heading animations<\/strong> \u2014 <code>TweenMax.from()<\/code> presets use anime.js v4 <code>animate(targets, params)<\/code> API.<\/li>\n<li>Add: <strong>Widget preset import\/export<\/strong> \u2014 export\/import current widget settings as JSON from the Elementor editor (nonce + capability gated).<\/li>\n<li>Add: <strong>Editor widget health hints<\/strong> \u2014 dismissible panel notices for missing Maps API key, empty gallery, and similar local checks.<\/li>\n<li>Add: <strong>Admin command palette (lite)<\/strong> \u2014 shortcuts to LandTech settings and documentation when WordPress <code>wp-commands<\/code> is available.<\/li>\n<li>Improved: <strong>Accessibility batch 1<\/strong> \u2014 Google Map, Audio Player, Popup, Offcanvas, and Posts Extra carousel focus\/ARIA\/keyboard\/reduced-motion support.<\/li>\n<li>Improved: <strong>Posts Extra grid<\/strong> \u2014 equal-height cards and responsive column gaps (CSS only).<\/li>\n<li>Improved: <strong>Element HTML cache<\/strong> \u2014 opt-in caching for Table, Inline SVG, and Text Divider static widgets.<\/li>\n<\/ul>\n\n<h4>2.3.3<\/h4>\n\n<ul>\n<li>Fix: Audio Player widget no longer fatal-errors Elementor preview when reading <code>waveform_skin<\/code> in <code>get_script_depends()<\/code> before settings hydrate.<\/li>\n<li>Add: <code>Extras_Widget::ltxe_try_get_settings()<\/code> helpers for safe asset dependency registration during preview bootstrap.<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>Fix: Google Map widget no longer fatal-errors Elementor preview when settings are not hydrated yet (<code>get_style_depends<\/code> \/ <code>get_script_depends<\/code> use safe settings read).<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>Fix: Register <code>landtech-extras-frontend<\/code> styles only when <code>elementor-frontend<\/code> is registered (WordPress 6.9.1+ dependency notice).<\/li>\n<li>Fix: Search Form skin null-safe <code>trim()<\/code> on empty button label text.<\/li>\n<li>Add: Add-on features tab shows Premium add-on version and feature toggle count when the add-on is active.<\/li>\n<li>Add: <code>landtech_extras\/acf_gallery_bridge_enabled<\/code> filter hook for Premium entitlement gating of ACF gallery controls.<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Phase 0: TableSorter v2.32.0; Isotope\/Packery non-pkgd builds; Leaflet OpenStreetMap map provider; library metadata alignment.<\/li>\n<li>Phase 1: Toggle FAQPage JSON-LD; display conditions (cookie, UTM presets, business hours); Table pagination and CSV paste import in the editor.<\/li>\n<li>Phase 2: Calendar migrated to Schedule-X; anime.js v4 with updated animation helpers; Heading Extra entrance animation presets; Audio Player optional WaveSurfer waveform skin; video player native playback-rate support; audio-player header typo fix.<\/li>\n<li>Phase 3: Posts Extra list, featured-grid, and timeline layout skins; Search Form live AJAX results via public REST route; new Lottie widget.<\/li>\n<li>Playground: demo pages for Lottie, FAQ Schema, Posts list\/featured-grid\/timeline skins, paginated Table, OpenStreetMap map provider, and live search.<\/li>\n<\/ul>\n\n<h4>2.2.101<\/h4>\n\n<ul>\n<li>Docs: Breadcrumbs widget documents optional <strong>BreadcrumbList<\/strong> structured data (microdata) when <strong>Structured data<\/strong> is enabled in widget settings.<\/li>\n<\/ul>\n\n<h4>2.2.100<\/h4>\n\n<ul>\n<li>Fix: Devices widget scrollable portrait\/landscape screens \u2014 CSS targeted non-existent class names; scrolling now works when enabled.<\/li>\n<li>Fix: Devices orientation toggle no longer shows a blank landscape screen when no landscape screenshot is set (falls back to portrait image).<\/li>\n<li>Fix: Playground Devices demo uses tall portrait and landscape screenshots so scroll and rotate are demonstrable.<\/li>\n<\/ul>\n\n<h4>2.2.99<\/h4>\n\n<ul>\n<li>Fix: Shorten readme short description to meet WordPress.org 150-character limit.<\/li>\n<\/ul>\n\n<h4>2.2.98<\/h4>\n\n<ul>\n<li>Fix: Playground Button Group demo ships fallback page CSS (padding, colors, effect backgrounds) so hover effects are visible when Elementor post CSS is incomplete.<\/li>\n<li>Fix: Playground Switcher demo shows Design \/ Build \/ Launch on the frontend \u2014 entrance animation now falls back when the appear plugin does not fire; nav stays visible on all breakpoints.<\/li>\n<li>Fix: Playground Devices demo seeds a phone screenshot, scrollable screen content, and orientation toggle instead of an empty mockup.<\/li>\n<\/ul>\n\n<h4>2.2.97<\/h4>\n\n<ul>\n<li>Docs: readme SEO \u2014 short description, widget catalog, and FAQ entries for Elementor Extras \/ Extras for Elementor migration and replacement terminology.<\/li>\n<\/ul>\n\n<h4>2.2.96<\/h4>\n\n<ul>\n<li>Add: Optional sanitized SVG uploads \u2014 Elementor \u2192 LandTech Extras \u2192 Advanced \u2192 Allow SVG uploads (admin opt-in; files sanitized on upload; works with Elementor media controls).<\/li>\n<li>Add: Inline SVG widget <strong>Source<\/strong> control \u2014 choose Media Library or <strong>Custom URL<\/strong> so you can link to an .svg without uploading through WordPress.<\/li>\n<li>Fix: Playground Inline SVG demo enables Override Color and uses the bundled SVG URL source.<\/li>\n<\/ul>\n\n<h4>2.2.95<\/h4>\n\n<ul>\n<li>Fix: Buttons widget hover effects did not animate because transition CSS targeted the wrong pseudo-elements; base styles now apply transitions to <code>.ee-button:before<\/code> \/ <code>:after<\/code> with sensible defaults.<\/li>\n<li>Fix: Buttons without a link now use a no-op <code>#<\/code> href (with preventDefault) so click and hover behave consistently on the frontend.<\/li>\n<li>Fix: Custom button effect modifier classes (direction, entrance) fall back to control defaults when unset so Clone\/Background effects are not stuck in a neutral state.<\/li>\n<li>Fix: Button Group tooltip init no longer throws when tooltip delay settings are absent (non-tooltip buttons).<\/li>\n<li>Fix: Playground demo pages regenerate Elementor post CSS after seeding so per-button effect colors and timing apply.<\/li>\n<\/ul>\n\n<h4>2.2.94<\/h4>\n\n<ul>\n<li>Fix: Calendar event clicks did nothing on the Default skin because the events panel stayed <code>display: none<\/code> even when <code>show-events<\/code> was toggled; the panel now overlays the month view when a day with events is clicked.<\/li>\n<li>Fix: Calendar event title links without a URL now open the events panel instead of doing nothing.<\/li>\n<li>Fix: Playground Calendar demo seeds compact skin with sample manual events so click-to-reveal behavior is testable.<\/li>\n<\/ul>\n\n<h4>2.2.93<\/h4>\n\n<ul>\n<li>Fix: Switcher widget stayed blank on the published frontend because entrance animation hides all slides until jQuery Appear fires; above-the-fold widgets now trigger appear immediately and nav\/arrows opacity animations accept combined jQuery targets.<\/li>\n<li>Fix: anime.js helper now resolves arrays of jQuery collections (nav + arrows) for TweenMax.set\/to calls used by Switcher.<\/li>\n<\/ul>\n\n<h4>2.2.92<\/h4>\n\n<ul>\n<li>Fix: Scroll Indicator progress never updated because jQuery <code>.data('start-offset')<\/code> \/ <code>.data('end-offset')<\/code> do not read HTML <code>data-start-offset<\/code> attributes (camelCase keys required); offsets are now read reliably and full-page body tracking uses document height.<\/li>\n<li>Fix: Playground Scroll Indicator demo seeds three anchored sections (List skin) with matching heading CSS IDs and scrollable content between them.<\/li>\n<\/ul>\n\n<h4>2.2.91<\/h4>\n\n<ul>\n<li>Fix: Age Gate and Popup modals showed a blank white box because legacy Magnific Popup animation CSS hides <code>.mfp-with-anim<\/code> until <code>.mfp-ready<\/code> is on the container; GLightbox now adds that class on open.<\/li>\n<li>Fix: Playground Age Gate demo seeds title, description, required age, button label, and classic skin.<\/li>\n<\/ul>\n\n<h4>2.2.90<\/h4>\n\n<ul>\n<li>Fix: Popup and Age Gate modals opened empty because inline content kept <code>mfp-hide<\/code> \/ <code>glightbox-hide<\/code> (<code>display: none !important<\/code>) after the GLightbox migration; hide classes are now stripped before inline slides load.<\/li>\n<li>Fix: Playground Popup demo seeds title, body copy, classic skin, and an Open modal click trigger.<\/li>\n<\/ul>\n\n<h4>2.2.89<\/h4>\n\n<ul>\n<li>Fix: Unfold open\/close animation failed because the anime.js timeline shim did not return the timeline from chained <code>.to()<\/code> calls (GSAP-style <code>.add().to().to()<\/code>).<\/li>\n<li>Fix: Playground Unfold demo now seeds multi-paragraph content, 35% visible height, and Read more \/ Read less labels.<\/li>\n<\/ul>\n\n<h4>2.2.88<\/h4>\n\n<ul>\n<li>Fix: Switcher widget stayed invisible on the frontend because the anime.js timeline shim did not understand GSAP label positions (<code>animateAll<\/code>, <code>animateAll+=<\/code>, <code>-=<\/code>); Switcher and Unfold animations now resolve correctly.<\/li>\n<li>Fix: Playground Switcher demo seeds three panels with images, classic skin, and entrance animation off for a reliable Live Preview.<\/li>\n<\/ul>\n\n<h4>2.2.87<\/h4>\n\n<ul>\n<li>Fix: Playground Inline SVG demo now ships a bundled SVG URL plus color, sizing, and hover settings (empty settings previously rendered a blank frontend).<\/li>\n<\/ul>\n\n<h4>2.2.86<\/h4>\n\n<ul>\n<li>Fix: Playground Button Group demo now seeds Clone, Flip, Background, 3D, and Cube hover effects (custom per-button styling was previously unset).<\/li>\n<\/ul>\n\n<h4>2.2.85<\/h4>\n\n<ul>\n<li>Fix: Gallery Slider thumbnail clicks now use explicit slide indexes, Swiper loop\/fade\/RTL handling, and auto-height updates so the preview image stays visible when navigating.<\/li>\n<li>Fix: Gallery Slider preview skips broken attachment URLs and falls back to the gallery item URL when needed.<\/li>\n<li>Fix: Playground Gallery Slider demo enables Elementor lightbox on preview images.<\/li>\n<\/ul>\n\n<h4>2.2.84<\/h4>\n\n<ul>\n<li>Fix: Playground critical error \u2014 store <code>_elementor_page_settings<\/code> as a PHP array (not JSON text) so Elementor page rendering does not fatal on PHP 8.<\/li>\n<li>Fix: Playground seeder sets the admin user during blueprint runPHP so Elementor document saves succeed.<\/li>\n<\/ul>\n\n<h4>2.2.83<\/h4>\n\n<ul>\n<li>Fix: Playground demo homepage rebuilt with styled CSS hero, category sections, and card links to all 28 free widget demos (Elementor HTML widget).<\/li>\n<li>Fix: Demo pages use the Elementor header\/footer template and hide the theme page title for cleaner previews.<\/li>\n<\/ul>\n\n<h4>2.2.82<\/h4>\n\n<ul>\n<li>Fix: Timeline demo works on WordPress Playground \u2014 widget registers on free Elementor (custom items); Posts source still requires Elementor Pro.<\/li>\n<li>Fix: Playground Timeline demo seeds custom milestone items with sample content and images.<\/li>\n<\/ul>\n\n<h4>2.2.81<\/h4>\n\n<ul>\n<li>Fix: Posts Extra demo works on WordPress Playground (free Elementor) via a standard <code>WP_Query<\/code> fallback when Elementor Pro query controls are unavailable; demo seeder now includes full grid\/query settings.<\/li>\n<li>Fix: Posts Extra registers on free Elementor installs for basic post grids; advanced Query panel still requires Elementor Pro.<\/li>\n<\/ul>\n\n<h4>2.2.80<\/h4>\n\n<ul>\n<li>Fix: Playground demo pages (including Switcher Demo) resolve at pretty permalinks after seeding via <code>flush_rewrite_rules()<\/code>.<\/li>\n<li>Fix: Switcher and Toggle Element demo pages seed with default panel content instead of empty widget settings.<\/li>\n<li>Fix: Demo pages save Elementor canvas data through the Elementor document API when available.<\/li>\n<\/ul>\n\n<h4>2.2.79<\/h4>\n\n<ul>\n<li>Fix: Gallery Slider \u2014 initialize Swiper through Elementor's async loader, correct thumbnail <code>slideTo<\/code> \/ <code>slideToLoop<\/code> handling, and guard against uninitialized instances.<\/li>\n<li>Fix: <code>anime.js<\/code> unminified build no longer throws <code>module is not defined<\/code> in the browser when <code>SCRIPT_DEBUG<\/code> is enabled.<\/li>\n<\/ul>\n\n<h4>2.2.78<\/h4>\n\n<ul>\n<li><strong>Try It Live demos<\/strong> \u2014 Playground blueprint seeds a demo homepage, one Elementor page per free widget (28 demos), sample media\/posts, and a grouped navigation menu via <code>includes\/playground-demo-seeder.php<\/code>.<\/li>\n<\/ul>\n\n<h4>2.2.77<\/h4>\n\n<ul>\n<li>Fix: WordPress Playground <strong>Try It Live<\/strong> link uses the public WordPress.org SVN blueprint URL (GitHub source repo is private).<\/li>\n<\/ul>\n\n<h4>2.2.76<\/h4>\n\n<ul>\n<li><strong>Try It Live<\/strong> \u2014 WordPress Playground blueprint (<code>blueprint.json<\/code>, <code>assets\/blueprints\/blueprint.json<\/code>), readme <strong>Try It Live - Preview This Plugin Instantly<\/strong> section, and <strong>Live demo<\/strong> links on the Plugins screen.<\/li>\n<\/ul>\n\n<h4>2.2.75<\/h4>\n\n<ul>\n<li>WordPress.org soft-warning remediation: standardized plugin prefixes on dismissible notice transients (<code>landtech-extras-*<\/code>), search-form action hooks (<code>landtech_extras\/\u2026<\/code>), Posts pagination query var (<code>ltxe-page<\/code>), and Elementor Select2 script handle (<code>landtech-extras-elementor-select2<\/code>); expanded <strong>External Services<\/strong> readme (browser vs server requests, exact hostnames); fixed search-form dynamic hook registration.<\/li>\n<\/ul>\n\n<h4>2.2.74<\/h4>\n\n<ul>\n<li>WordPress.org review follow-up: removed unnecessary <code>wp-admin\/includes\/plugin.php<\/code> load from bootstrap guard; all <code>is_plugin_active()<\/code> call sites use guarded <code>landtech_extras_require_plugin_api()<\/code>; Infinite Scroll core build strips jQuery bridge code (vanilla DOM API only).<\/li>\n<\/ul>\n\n<h4>2.2.73<\/h4>\n\n<ul>\n<li>WordPress.org review (T2): ACF Gallery bridge is fully enabled when Advanced Custom Fields is active (removed add-on entitlement gate); fixed PHP syntax error in template loop background-image module; removed unnecessary <code>wp-admin\/includes\/plugin.php<\/code> include; upgraded GLightbox to 3.3.1; Infinite Scroll build comment updated to avoid bundled-jQuery scanner false positive.<\/li>\n<\/ul>\n\n<h4>2.2.72<\/h4>\n\n<ul>\n<li>WordPress.org review follow-up: Infinite Scroll rebuilt as core-only bundle (no jquery-bridget); Posts Classic uses <code>new InfiniteScroll()<\/code> API; Isotope\/Packery register with WordPress core jQuery dependency; all plugin script handles prefixed with <code>landtech-extras-<\/code>.<\/li>\n<\/ul>\n\n<h4>2.2.71<\/h4>\n\n<ul>\n<li>WordPress.org review remediation: replaced unmaintained Magnific Popup with GLightbox (MIT); removed GPL-incompatible GreenSock\/GSAP, SplitText, and CustomEase in favor of anime.js + Splitting.js; Infinite Scroll now registers with WordPress core jQuery; template loop background CSS uses <code>wp_add_inline_style()<\/code> instead of inline <code>&lt;style&gt;<\/code> tags; prefixed admin dismiss notice keys; removed Load TweenMax setting.<\/li>\n<\/ul>\n\n<h4>2.2.70<\/h4>\n\n<ul>\n<li>WordPress.org submission readiness: API key\/token settings use identity sanitization (not <code>sanitize_text_field()<\/code>); expanded <strong>Development<\/strong> and third-party library documentation in readme; distribution zip output to <code>DIST\/<\/code>; removed dead stub module folders.<\/li>\n<li>Admin: dismissible notice AJAX hardened (nonce + capability).<\/li>\n<\/ul>\n\n<h4>2.2.69<\/h4>\n\n<ul>\n<li>Posts Extra (Classic): Packery <strong>second item width<\/strong> control and <code>.ltxee-packery-second<\/code> span class for Metro tiles (Packery); default CSS in <code>assets\/css\/frontend.css<\/code> and <code>frontend-rtl.css<\/code>.<\/li>\n<li>Build: <code>package.json<\/code> includes <code>npm run build:assets<\/code> to regenerate minified frontend CSS\/JS (see <strong>Development<\/strong>).<\/li>\n<\/ul>\n\n<h4>2.2.68<\/h4>\n\n<ul>\n<li>Posts Extra (Classic): responsive <strong>Packery: first item width<\/strong> when layout is Metro tiles (Packery); overrides default width for <code>.ltxee-packery-featured<\/code> per breakpoint.<\/li>\n<\/ul>\n\n<h4>2.2.65<\/h4>\n\n<ul>\n<li>WordPress <strong>6.7+<\/strong>: when no <code>landtech-extras-for-elementor-{locale}.mo<\/code> exists, assign <code>NOOP_Translations<\/code> for the text domain so gettext on <code>plugins_loaded<\/code> does not hit just-in-time loading before <code>after_setup_theme<\/code>.<\/li>\n<\/ul>\n\n<h4>2.2.64<\/h4>\n\n<ul>\n<li>WordPress <strong>6.7+<\/strong>: load first readable <code>.mo<\/code> via <code>load_textdomain()<\/code> on <code>plugins_loaded<\/code> (early priority) so add-on\/embeddings hooks avoid \"translation loading triggered too early\".<\/li>\n<\/ul>\n\n<h4>2.2.63 \/ 2.2.62<\/h4>\n\n<ul>\n<li>Superseded text-domain timing fixes for WordPress 6.7+ \u2014 use <strong>2.2.64+<\/strong>.<\/li>\n<\/ul>\n\n<h4>2.2.61<\/h4>\n\n<ul>\n<li>Gallery widget: removed invalid <code>packery-mode<\/code> script dependency; cleaned redundant vendor stubs (Posts Packery stack unchanged).<\/li>\n<\/ul>\n\n<h4>2.2.60<\/h4>\n\n<ul>\n<li>Metro tiles (<strong>Packery<\/strong>): Packery + Isotope wiring, <code>ltxee-packery-featured<\/code>, Phase 4 layout policy \/ grandfather scan updates.<\/li>\n<\/ul>\n\n<h4>2.2.59<\/h4>\n\n<ul>\n<li>Posts Base: <code>landtech_extras\/posts\/advanced_query_args<\/code>, <code>query_paged<\/code>, <code>set_query_args<\/code> hooks before <code>set_query()<\/code> (add-on REST facets \/ advanced query).<\/li>\n<\/ul>\n\n<h4>2.2.58<\/h4>\n\n<ul>\n<li><strong><code>metro<\/code><\/strong> layout (Isotope fitRows), <code>landtech_extras\/posts\/grid_layout_mode_choices<\/code> filter, resize-safe Isotope relayout, Phase 4 <code>metro<\/code> handling.<\/li>\n<\/ul>\n\n<h4>2.2.57<\/h4>\n\n<ul>\n<li>Posts Extra preset skins use Classic loop handler; editor loads Isotope only when the document needs it; <code>landtech_extras\/settings\/features_fields<\/code> for add-on settings.<\/li>\n<\/ul>\n\n<h4>2.2.56<\/h4>\n\n<ul>\n<li>Devices widget: landscape\/portrait and <code>Group_Control_Image_Size<\/code> guards; correct image URL validation for requested field.<\/li>\n<\/ul>\n\n<h4>2.2.55<\/h4>\n\n<ul>\n<li>Posts Extra: defer Isotope until needed; Phase 4 opt-in filters for add-on masonry grandfather.<\/li>\n<\/ul>\n\n<h4>2.2.54<\/h4>\n\n<ul>\n<li>ACF gallery bridge (<strong>ACF<\/strong> required): Gallery \/ Gallery Slider ACF Gallery source (<code>includes\/gallery\/acf-gallery-bridge.php<\/code>).<\/li>\n<\/ul>\n\n<h4>2.2.53+ (fork)<\/h4>\n\n<ul>\n<li><strong>LandTech Extras for Elementor<\/strong> on WordPress.org: External Services \/ BYOK readme disclosure, org\u2013add-on coexistence (<code>LANDTECH_EXTRAS_RUNTIME_FAMILY<\/code>), text domain <code>landtech-extras-for-elementor<\/code>, GPLv3, directory updates only (no custom org updater).<\/li>\n<\/ul>\n\n<h4>Earlier releases<\/h4>\n\n<ul>\n<li>Releases <strong>2.2.52 and older<\/strong> inherit the historical <strong>Elementor Extras<\/strong> changelog (widgets, extensions, Elementor compatibility). The full line-by-line history is omitted here to satisfy WordPress.org's <strong>5,000-character<\/strong> Changelog limit; consult Git\/SVN or shipped release archives for the complete record.<\/li>\n<\/ul>","raw_excerpt":"Elementor widgets and extensions \u2014 GPL fork of Elementor Extras. Gallery, calendar, maps, posts, navigation, and editor tools.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/331356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=331356"}],"author":[{"embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brelandr"}],"wp:attachment":[{"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=331356"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=331356"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=331356"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=331356"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=331356"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/he.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=331356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}