Release Notes

Changelog

Stay up to date with the latest updates and improvements to LPagery

Version 3.0.0

Feat: Live Mode. A new Render Mode that stores only a lightweight stub per generated page and fills in the template at render time. Template changes reach every page instantly, and your database stays small. Switch a page set between Classic and Live at any time, per page or for the whole set
Feat: Views. Show related generated pages anywhere with the new [lpagery_view] shortcode. Build a list or card grid in the new Views tab with live preview, match pages by a placeholder column or show all pages of a page set, and control ordering, limit and pagination
Feat: Background Generation. Creating, updating and re-uploading page sets, as well as Render Mode switches, run in the background with live progress, so large runs no longer block the browser or time out. Cancel a run at any time
Feat: Overview tab. The new landing view shows what LPagery has built on your site: page counts, recent page sets, a month-by-month chart of your inventory, and health checks for Google Sheet Sync and background tasks
Feat: Spintax: Each page keeps its wording across template edits, sheet syncs and forced updates
Feat: Polylang support, and WPML pages now get the right language for their terms and links. LPagery sets the language of every generated page in Classic and Live Mode, the template picker shows each template's language, and the slug check only looks at pages in that language
Feat: Manage tab shows the Render Mode of every page set and how much database space switching it to Live Mode would free
Feat: Settings screen redesigned into tabs with a save bar, plus new options for Background Generation and Virtual Image URLs
Feat: Live Mode pages serve their images through Virtual Image URLs instead of duplicating attachments, with an edge cache check that warns you when your CDN would get in the way

Version 2.5.8

Security: Fix stored XSS via post titles in the LPagery admin filter banner (CVE-2026-15404). Post titles and permalinks are now escaped, and the banner only renders for posts the current user is allowed to edit.

Version 2.5.7

Fix: Google Sheet sync "update look" now correctly updates existing pages instead of skipping them
Fix: Honor the "overwrite manual changes" choice when re-syncing manually edited pages
Security: Escape the LPagery template-filter labels shown above the admin post list so a page title containing a quote or markup can no longer break or inject into the inline script
Chore: Refactor the plugin bootstrap (lpagery.php) into per-concern hook registrar modules under src/io/hooks/ — internal only, no behavior change (some undocumented global hook callbacks were renamed to static methods)

Version 2.5.6

Chore: Update libraries
Chore: WordPress 7.0 Support

Version 2.5.5

Fix: Integrate existing pages into LPagery when having a parent page

Version 2.5.4

Fix: Follow redirects when downloading images

Version 2.5.3

Feat: Allow reassign template for page sets with not deleted templates

Version 2.5.2

Fix: Keep global elements for Divi 5

Version 2.5.1

Feat: Several WP-Admin Performance enhancements

Version 2.5.0

Feat: Auto purge Elementor cache after creation
Fix: Allow to ignore pages with slugs which already exist in other LPagery Page Set

Version 2.4.13

Fix: Ensure correct boolean values when deserializing

Version 2.4.12

Fix: Remove unnecessary query override

Version 2.4.11

Feat: Divi 5 Support

Version 2.4.10

Feat: Image lookup table to increase performance when image processing with large database
Fix: Check user permissions before performing actions

Version 2.4.9

Fix: Display error message

Version 2.4.8

Feat: Add Debug Mode

Version 2.4.7

Chore: Upgrade Dependencies

Version 2.4.6

Fix: Support older mysql databases
Fix: allow numbers as usernames in validation

Version 2.4.5

Fix: Colibri CSS-Generation

Version 2.4.4

Fix: Reduce maximum concurrent image preview requests to 5 to minimize server load

Version 2.4.3

Chore: Update npm libraries

Version 2.4.2

Fix: Error handling when server issue happens

Version 2.4.1

Fix: Small UI improvements

Version 2.4.0

Feat: Optimize Sheet Sync: Only synchronize pages that have actually changed to reduce server load
Fix: Sheet Sync: Remove retry attempts on 404 errors to prevent unnecessary server load
Fix: Sheet Sync: Update pages in background when sheet sync is enabled

Version 2.3.10

Chore: Update npm libraries
Fix: CPT plural label

Version 2.3.9

Fix: Return proper error message if cron job is not configured correctly
Fix: autoload absolute path

Version 2.3.8

Feat: LPagery App Sync

Version 2.3.7

Fix: Several Google Sheet Sync validation fixes

Version 2.3.6

Fix: check for string before base64_decode

Version 2.3.5

Fix: Improve performance when confirming pages
Feat: Show banner if there is a license/premium mismatch

Version 2.3.3

Fix: Image processing for Flatsome
Fix: Manually update invalid date handling

Version 2.3.2

Fix: Add support for 0-dates (0000-00-00 00:00:00)

Version 2.3.1

Feat: Repair Database Schema functionality
Feat: Allow lpagery_parent with post url

Version 2.3.0

Feat: Auto renew nonce to prevent 403 errors
Fix: Only replace HTML in image processing when image got actually replaced
Fix: Delete Pages checkbox default enabled

Version 2.2.1

Fix: Allow replacements for non-ascii symbols
Fix: Only enable numeric replacements if key and values are numeric
Fix: Allow pending post status

Version 2.2.0

Feat: Allow image metadata replacements for existing images
Fix: Use get_permalink instead of get_page_link for interlinking

Version 2.1.8

Fix: Deserialize Bricks Data before processing

Version 2.1.7

Fix: Early abort Google Sheet Sync if item is currently processing to avoid race conditions
Fix: Keep Interlinking enabled for pages created with a pro plan when downgraded to free

Version 2.1.6

Fix: Allow dynamic parent when updating pages when parent is part of the identifier
Feat: Show a note to the user when the slug contains a slash for creating hierarchical content

Version 2.1.5

Feat: Purge Cache after creating a page
Feat: Use new API for fetching cities and google sheet data

Version 2.1.4

Fix: Replace empty values in Google Sheet Sync

Version 2.1.3

Fix: Fix merging existing and new slugs in ui for update
Fix: urldecode slug before checking for duplicates

Version 2.1.1

Fix: WP-Cron deserialization issue for null property

Version 2.1.0

Feat: Allow different parents with same slug per page set
Feat: Update and integrate existing pages into LPagery
Feat: Reset LPagery Functionality
Feat: Throw error when updating slug with new Placeholder

Version 2.0.23

Fix: Error Handling for Database Errors

Version 2.0.22

Fix: Add caching layer for Attachment Search to prevent full table scans

Version 2.0.21

Fix: Improve Attachment Search Query Performance
Fix: Add support for spaces in slug configuration

Version 2.0.20

Fix: Parsing Errors

Version 2.0.19

Fix: Remove SQL Query which used JSON_ARRAYAGG (not available on some database engines)

Version 2.0.18

Fix: Settings in free version

Version 2.0.17

Feat: Assign User to Page Set if creator is deleted
Feat: Show hint in settings if wp cron is disabled
Fix: Allow null values on user name and email for deleted users
Fix: Improve WPML detection

Version 2.0.16

Feat: Update Page Status with Sheet Sync
Fix: Describing warning in free version when template without placeholder in title selected
Fix: Show error to user if server error occurs

Version 2.0.15

Fix: Find existing image when downloading and existing image is suffixed with "-scaled"

Version 2.0.14

Feat: Add Support for Link Whisper
Feat: Show Label in CPT-Select
Feat: Add Support for image processing when month/year directories are disabled
Feat: Add check before creation for not existing placeholder in slug
Fix: Search for Attachments without Ending
Fix: Reassign Template Dialog Styling
Fix: Sync Status when finished
Fix: Type Error in CPT-Select

Version 2.0.13

Feat: Add Post Type and ID to Page Select
Fix: BeBuilder base64 encoded content
Fix: Add ending to attachment when it is missing during save

Version 2.0.12

Feat: Bulk Delete Performance Optimizations
Feat: Allow "published" as status in lpagery_status
Feat: Allow to re-assign template page if it was deleted
Fix: Wrong menu when plugin not activated yet
Fix: Fixing an Edge-Case where the Sheet Sync doesnt start

Version 2.0.11

Fix: Trigger next sync after current one is finished to prevent duplicated cron-events

Version 2.0.10

Feat: Start Sheet Sync per Page Set via Manage
Fix: Optimize Parallel Sheet Syncs
Fix: Onboarding Styling

Version 2.0.9

Fix: Image Processing case insensitive search
Fix: Show correct duplicate header message

Version 2.0.8

Fix: Trigger Sheet Sync after creating it
Fix: allow numeric purposes

Version 2.0.7

Fix: BeBuilder Image Processing
Fix: Post permalink and type optional

Version 2.0.6

Fix: Improve Wording
Fix: Improve Attachment Query

Version 2.0.5

Feat: Improved Onboarding
Feat: Check for Attachments with duplicate names
Feat: Trigger Sheet Sync from Dashboard without needing to sync manually
Feat: Show Queue Items in Manage
Fix: Find correct images for image processing
Fix: Set Sheet Sync Status to error if an error occurs

Version 2.0.4

Chore: Update Freemius SDK

Version 2.0.3

Feat: Allow assigning of all hierarchical taxonomies
Feat: Show example slug and title when checking for duplicates
Fix: WPML Query Issue
Fix: Breakdance Builder compatibility

Version 2.0.2

Fix: Improve Deletion
Fix: Improve UX of selection if pages should be overwritten
Fix: Include Slugs with placeholders when checking for duplicates

Version 2.0.1

Chore: Adapt Readme

Version 2.0.0

Feat: Complete Rebuild of the User Interface
Feat: New Update Flow
Feat: Add support for taxonomies from dashboard
Feat: Download Radius Data as XLSX
Feat: Button for Syncing Google Sheet now

Version 1.5.9

Fix: use secret based auth for google sheet sync

Version 1.5.8

Feat: Using a Queue-Based approach for Google Sheet Sync
Fix: Fix Image Search without ending

Version 1.5.7

Fix: Increase Timeout at Google Sheet Sync
Fix: Add backoff/retry mechanism to Google Sheet Sync

Version 1.5.6

Fix: Google Sheet Sync pause each 100 pages
Fix: Import Wordpress Files when using sync via API

Version 1.5.5

Fix: JQuery Validator Compatibility issue
Fix: Enhance Google Sheet Sync Error Message

Version 1.5.4

Fix: Keep Status when updating
Fix: Ignore invalid download urls and continue with the next one

Version 1.5.3

Fix: MySQL Syntax

Version 1.5.2

Fix: Drop legacy unique index if exists

Version 1.5.1

Fix: Seedprod Page Creation

Version 1.5.0

Refactor: Major codebase refactoring and restructuring for improved performance and maintainability.
Compat: Minimum PHP version: 7.4
Fix: Settings Categories and Tags from Dashboard works again

Version 1.4.33

Feat: New Request-Based Google Sheet Sync Mode
Feat: Allow numeric placeholders without braces
Fix: Cleanup Transients after page creations

Version 1.4.32

Feat: Enable new pricing model

Version 1.4.31

Fix: Improved string escaping mechanism to ensure better handling of special characters.

Version 1.4.30

Fix: Do not slash taxonomy slugs when creating

Version 1.4.29

Fix: Only set collate and charset if not empty during table creation

Version 1.4.28

Feat: Add support for taxonomies
Feat: Add Interlinking Feature
Fix: Brizy Page Creation
Fix: Allow settings publish date from sheet when updating
Fix: Do not overwrite publish date when updating with now
Fix: Do not show title placeholder warning when manual syncing

Version 1.4.27

Fix: Clear Divi Cache after creating page with Divi
Fix: Do not slash strings when in json

Version 1.4.26

Feat: Export Template Page
Feat: Add Consistent Update Feature
Fix: add slashes to ensure correctly escaped content

Version 1.4.25

Fix: fix file import

Version 1.4.24

Fix: only send necessary data when checking for image placeholders
Feat: add warning if image name from sheet contains slug
Fix: only parse blocks if content comes directly from the sheet

Version 1.4.23

Fix: HTML structure of the plugin
Fix: save processed slugs in backend
Fix: check for placeholder in title case insensitive

Version 1.4.22

Fix: Elementor CSS file creation
Fix: Google Sheet Sync RAM Protection

Version 1.4.21

Fix: increase performance when checking for duplicated slugs

Version 1.4.20

Fix: add wpml legacy support
Feat: improve input validation before creating pages

Version 1.4.19

Fix: do not format blocks if kadence is active
Fix: freemius sdk upgrade

Version 1.4.17

Fix: allow 0 as replacement value
Fix: perform image processing after replacing to prevent urldecode issues in HTML content

Version 1.4.16

Fix: use maybe_unserialize instead of unserialize to prevent deserialization issues

Version 1.4.15

Fix: Download data as xlsx and not csv
Fix: Update Process Post in DB instead of deleting and creating a new one to ensure data integrity
Fix: Only add lang=all suffix if wpml is active
Fix: Allow to deselect the parent page in the dashboard

Version 1.4.14

Fix: Check for array is null in media replacement

Version 1.4.13

Fix: Regex for detecting placeholders in HTML
Fix: Consider ignore post when checking for duplicated slugs
Feat: Allow to use multiple templates for one-page creation process

Version 1.4.12

Fix: Download CSV works again

Version 1.4.11

Fix: Skip concurrent page creation and updates to prevent race conditions which can result in duplicated pages
Fix: Fix setting the future publish date from input file when updating

Version 1.4.10

Fix: Use Transients to make sure the Google Sheet runs only once at the same time

Version 1.4.9

Fix: Database Migration Issue
Fix: Trim Fields in Grid for Free Version

Version 1.4.8

Feat: Add enfold support

Version 1.4.7

Feat: Confirmation Modal Paging and Performance Optimizations
Fix: Create new nonce to prevent 403 errors
Fix: Update pages only when needed to increase performance
Fix: When creation is successful after retry, proceed correctly

Version 1.4.6

Fix: Include image PHP file when Syncing via Cron

Version 1.4.5

Fix: Add Legacy Support for Table creation

Version 1.4.4

Fix: Increase Google Sheet Timeout

Version 1.4.3

Feat: Downloading Images
Fix: Use wp_remote_get to retrieve google sheet json
Fix: Google Sheet Sync Timeout Limit

Version 1.4.2

Fix: Add support for large inputs (> 6MB)

Version 1.4.1

Fix: Add legacy MySql Support
Fix: Upsert Process Error Handling

Version 1.4.0

Feat: add google sheet sync
Feat: add Gutenberg Blocks Support
Feat: Update pages by Slug and not by ID

Version 1.3.6

Fix: add support for big input files
Fix: provide null-safety when accessing vars

Version 1.3.5

Fix: use papaparse csv library
Fix: add null checks
Fix: do not use hidden attribute in HTML elements
Feat: Show confirm dialog if duplicated slugs where found

Version 1.3.4

Fix: correct js script enqueue order

Version 1.3.3

Fix: fix fifu caching issues

Version 1.3.2

Feat: Add fifu support

Version 1.3.1

Fix: Add PHP 7.x support

Version 1.3.0

Feat: Add importing post attributes from sheet
Feat: Allow to set post publish date

Version 1.2.18

Feat: Add missing file

Version 1.2.17

Feat: Add WPML support

Version 1.2.16

Fix: Filter for all posts in History possible
Fix: Searching process in Dashboard possible
Feat: Template delete protection
Feat: History UI more clear

Version 1.2.15

Fix: save css for BeBuilder posts

Version 1.2.14

Feat: add support for BeBuilder

Version 1.2.13

Fix: use iterative approach to create pages to prevent performance issues on large datasets
Feat: show hint if input file contains image-column and image processing is disabled

Version 1.2.12

Feat: add freemius menu
Fix: regex for detect placeholders inside html to prevent broken pages created

Version 1.2.11

Feat: add support for nested placeholders
Feat: add support for mpg placeholders

Version 1.2.10

Feat: allow adding categories and tags from input file
Feat: add shortcode for displaying created pages

Version 1.2.9

Fix: sending radius filter when fetching cities
Fix: adding aioseo support

Version 1.2.8

Fix: Add str_ends_with and str_starts_with compat methods

Version 1.2.7

Feat: Add permalink to csv download
Fix: Move bulk deletion to browser to prevent timeout issues

Version 1.2.6

Feat: Updated Freemius SDK to the latest version

Version 1.2.5

Fix: trim long header names in modal
Fix: allow to have curly brackets around the headers

Version 1.2.4

Fix: remove mixed type

Version 1.2.3

Fix: Escape css vars in created pages

Version 1.2.2

Fix: Add new version to asset enqueues to prevent browser caching issues

Version 1.2.1

Fix: Fix newlines only on HTML content

Version 1.2.0

Feat: Bulk update and delete created pages

Version 1.1.11

Fix: Use WP_MAX_MEMORY_LIMIT instead of WP_MEMORY_LIMIT

Version 1.1.10

Feat: Check for available RAM to prevent RAM exhaustion at creating pages
Feat: Pause at every 50 pages to lower the CPU consumption
Feat: Retry if error occurs

Version 1.1.9

Fix: register str_contains if not exist (legacy support)
Feat: allow plain HTML in placeholder

Version 1.1.8

Fix: sanitize url when string is url
Fix: remove manual creation of elementor css file
Feat: allow to have private and draft posts as template

Version 1.1.7

Fix: no more error is thrown when using the image processing with xlsx/google sheet

Version 1.1.6

Fix: deactivate free version when upgrading to pro
Fix: trigger elementor save to prevent caching issues
Feat: csv validation

Version 1.1.5

Fix: encode with utf-8 when parsing html

Version 1.1.4

Fix: only replace content if type is string

Version 1.1.3

Fix: add version to modal enqueue

Version 1.1.2

Feat: Allow to modify the author in the settings section
Fix: urldecode data correctly to allow quotes passed
Fix: sanitize file after creating the image names

Version 1.1.1

Fix: unique ids for HTML elements

Version 1.1.0

Feat: add support for not hierarchical post types
Feat: add image Processing (pro only)
Fix: remove all "\n" from content

Version 1.0.14

Feat: add pro badge in free version
Feat: add preview mode
Feat: add support for tags
Fix: unique names for global jquery functions
Fix: replace placeholders in brizy edit data
Fix: regex replace html fix. Only replace when keyword is wrapped in html
Fix: get spintax settings before the generation once to improve performance
Fix: add LPagery logo to intro

Version 1.0.13

Fix: remove adding license key to enqueues
Fix: stop page creation if error occurs

Version 1.0.12

Feat: add type posts to search
Fix: json_encode without numeric checks
Fix: replace placeholders with HTML-Elements inside (for example when pasted formatted from a Google sheet)
Fix: only escape newlines when unescaped newlines are found inside the content

Version 1.0.11

Fix: escape newlines when having json content
Fix: uri-decode each json element separately
Fix: only replace if value is type string

Version 1.0.10

Fix: escaping quotes in json content
Fix: uri-encode payload when sending to backend

Version 1.0.9

Feat: auto detect csv delimiter
Fix: substitution handling of json content
Fix: missing columns when reading xlsx files
Fix: optimize input validation

Version 1.0.8

Fix: Disable Spintax default setting

Version 1.0.7

Feat: Add freemius support for trial version

Version 1.0.6

Fix: In case of an error, show the details to simplify error reporting

Version 1.0.5

Fix: CSS in the modal grid (edit buttons)
Fix: saving the settings with empty custom post types works now