=== Bulk Page Generator - LPagery ===
Contributors: niklaslindemann, jonaslindemann
Tags: bulk page, seo, local seo, mass page, programmatic seo
Requires at least: 6.2
Tested up to: 6.9.1
Requires PHP: 7.4
Stable tag: 2.5.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Effortlessly mass generate unlimited SEO-optimized pages in bulk with LPagery. Boost traffic, save time, and grow your business in just 5 minutes!

== Description ==
Try it out on your free dummy site: Click here to get a live interactive demo => [https://demo.lpagery.io/free](https://demo.lpagery.io/free).


**"Get 10x more organic traffic and reach more customers effortlessly with LPagery."**

🎯 **Why Choose LPagery?**

* Create pages for every city, service, or product you offer—automatically from a simple spreadsheet and a template page.
* Convert local customers with personalized, targeted landing pages.
* Generate thousands of ranking pages in minutes with very little manual work.

✨ **How It Works:**

1. **Design a Template:** Build one beautiful template page using your favorite WordPress theme or page builder, and include {placeholders} for dynamic data.
2. **Prepare Your Data:** Add your locations, services, or products into a simple spreadsheet or use our free Source File Creator.
3. **Generate Pages:** Click "Generate," and LPagery will do the rest. Your custom pages are ready to rank.

⚡ **Results You Can Expect:**

* Pages live in under 5 minutes.
* Google starts indexing them in 48-72 hours.
* Begin attracting local traffic within the first week (depending on competition and other SEO factors).

---

== Here's How LPagery Makes Your Life Easier ==

[youtube https://www.youtube.com/watch?v=fOlVlxhSAXk]

**Step 1: Design Your Template**
   Create one template page in WordPress using any theme or page builder. Add {placeholders} (e.g., {city}, {service}) where dynamic data will go, and LPagery will handle the rest.

**Step 2: Start With Your Data**
   Add your services, locations, or any custom data into a spreadsheet. Each row in the spreadsheet becomes a page. Use CSV/XLSX files, or connect directly to Google Sheets with the Pro version.

   💡 Need help setting up your data? Use our free [Source File Creator](https://lpagery.io/lpagery-source-file-generator-v2/?hide_sidebar=true&free_version=true&show_onboarding=true) to easily generate keyword combinations and eliminate manual entry.

**Step 3: Generate Pages in One Click**
   Combine your template with your data. LPagery will instantly generate SEO-optimized pages tailored to your needs.

---

== Who Can Benefit from LPagery? ==

* **SEO Optimization for Local Businesses:** Generate landing pages for every location or service to improve your local search visibility and attract new customers.
* **Marketing Agencies:** Scale campaigns by creating location or service-specific pages for multiple clients quickly and effectively.
* **E-Commerce Stores:** Build product landing pages tailored to different regions or demographics to drive conversions.
* **Real Estate Websites:** Create property-specific pages for listings or neighborhoods to improve discoverability.
* **Event Planners:** Generate pages for each event, venue, or date to boost engagement and attendance.
* **Educational Institutions:** Design pages for each course or program to provide detailed information to prospective students.
* **Travel & Tourism:** Build pages for destinations or packages to enhance bookings.
* **Job Portals:** Generate job listing pages by category or location to improve accessibility.
* **Directories and Listing Sites:** Create pages for individual listings to improve structure and SEO rankings.
* **Affiliate Marketers:** Drive conversions with product-specific pages optimized for search traffic.

---

== Why People Love LPagery ==

* **Save Hours of Work:** Stop wasting time on repetitive tasks—generate hundreds or thousands of pages in minutes.
* **Boost SEO:** Rank for local search terms, products, or services with SEO-optimized pages.
* **Super Easy to Use:** A beginner-friendly interface and onboarding process mean you can start seeing results in under 5 minutes.
* **Highly Flexible:** Works seamlessly with most WordPress themes, page builders, and SEO plugins.
* **Free to Start:** Use the free plugin to experience LPagery’s core features before upgrading to unlock its full potential.

---

== HOW EASY IS IT? ==

Our guided onboarding ensures success from the start when first installing LPagery:

1. **Quick Install (2 minutes):** Install the plugin, and access the built-in visual onboarding with helpful videos for every step.
2. **Set Up (3 minutes):** Create your template, import your data, and click generate.

Need help? Check out our [Getting Started Guide](https://intercom.help/lpagery/en/collections/10669566-getting-started) for a walkthrough.

---

== RESOURCES ==

We’ve got you covered with resources to maximize LPagery’s potential:

* **Knowledge Base:** Explore our [Knowledge Base](https://intercom.help/lpagery/en) for in-depth guides and FAQs.
* **Video Tutorials:** Learn with step-by-step [Video Tutorials](https://www.youtube.com/@lpagery-wordpressplugin2980).
* **Support:** Reach out anytime via our [Support Portal](https://lpagery.io/contact).

== WHY CHOOSE LPagery? ==

LPagery is the go-to WordPress plugin for businesses looking to expand their online presence without any complexity. Here's why the free version of LPagery is your best bet for efficient and effective SEO improvement:

* **Bulk Creation:**
Effortlessly generate multiple pages and posts at once. With LPagery, you can scale your content quickly, ensuring your site remains dynamic and engaging.

* **CSV/XLSX Import:**
Simplify your workflow by importing data directly from a CSV or XLSX file. This feature allows for easy data management and page generation, saving you time and hassle.

* **Generate Pages in Bulk:**
Create multiple pages efficiently with the free plan (up to 100 pages per run). For unlimited page creation in a single process, upgrade to Pro.

* **Placeholders:**
Utilize up to 3 placeholders to create dynamic, personalized content that speaks directly to your audience. This level of customization ensures each page or post is relevant and engaging.

* **User-Friendly:**
LPagery is designed with simplicity in mind. Its intuitive interface makes it accessible for users of all skill levels, so you can start creating content right away.

* **High Compatibility:**
Whether you prefer a specific page builder or theme, LPagery's flexible design ensures seamless integration with your WordPress site.

==FREE FEATURES ==
* Bulk create pages & posts
* CSV/XLSX import
* Generate unlimited pages with the free plan (100 pages per run)
* Use up to 3 placeholders with the free plan
* Easy & intuitive to use
* High customization due to CSV and pagebuilder/theme compatibility


== TESTED AND WORKS WITH ==
* Elementor
* WPBakery
* Divi
* BeaverBuilder
* SeedProd
* Flatsome
* Astra
* OceanWP
* Themify
* Brizy
* Visual Composer
* Live Composer
* Enfold
* Classic Editor WP
* Gutenberg
* SiteOrigin Page Builder
* Bricks
* Breakdance
* Yoast SEO Plugin
* RankMath SEO
* All In One SEO
* SEOPress
* Link Whisper
* And nearly all other themes and pagebuilders

We designed LPagery to work with nearly all themes and pagebuilders so even if your theme/pagebuilder is not on this list, it will probably work too!

== PRO FEATURES ==
[LPagery Pro](https://lpagery.io/pricing?utm_source=wp_repo&utm_medium=link&utm_campaign=repo) offers the tools necessary for the full automatization of the creation of your landing pages.

* **Create Unlimited Pages at Once:**
Generate thousands of pages in a single run without any limitations, unlike the free version which is limited to 100 pages per creation process.

* **Google Sheet Sync:**
Synchronize your landing page data directly from Google Sheets, enabling real-time content updates. Create, delete and update pages directly from your Google Sheet without having to even log in to WordPress.

* **Radius Feature:**
Automatically targets and generates landing pages for cities within a specified radius, perfect for local SEO.

* **Unlimited Placeholders:**
Create dynamic content by utilizing an unlimited number of placeholders in your templates.

* **Bulk Update the Generated Pages:**
Easily manage and update all your generated pages in bulk, saving time and ensuring consistency.

* **Assign Parent Page, Status, Categories, Tags, Taxonomies and Author from Sheet:**
Directly assign these elements from your data source, enhancing page organization and SEO.

* **Drip Content:**
You can set the publish date in the future from the source file letting you easily drip your blog content.

* **Custom URI Editor:**
Customize your page URLs for better SEO performance and user experience.

* **Dynamic Content (Spintax):**
Generate unique content across pages using Spintax to vary titles, descriptions, and more.

* **Dynamic Images:**
Incorporate unique images on each page, improving visual appeal and engagement.

* **Download Images from Input File:**
Automate the process of adding images to pages by downloading them directly from an input file.

* **Custom Post Types:**
Extend the plugin's functionality to support various custom post types, offering flexibility in content management.

* **Interlinking:**
Automatically add internal links to your generated pages, improving SEO and user experience.

* **Priority E-Mail and Live Chat Support:**
Gain access to priority support for any inquiries or issues, ensuring a smooth operation.


== INSTALLATION ==


1. Go to `Plugins -> Add New` section from your admin account and search for `LPagery`.
2. Click ‘Install Now’
3. Activate the Plugin and you are ready to go


You can also install this plugin manually:


1. Download the plugin's ZIP archive and unzip it.
2. Copy the unzipped `lpagery` folder to the `/wp-content/plugins/` directory.
3. Activate the plugin through the 'Plugins' menu in WordPress




== FAQ ==
= Can I use LPagery with my theme or page builder? =
We developed LPagery to be usable with every WordPress theme and most popular page builders. If you encounter issues with your theme or page builder, please contact us and we will figure out a solution!

We are constantly testing LPagery with the most popular WordPress page builders and themes to ensure full compability:

* Elementor
* WPBakery
* Divi
* BeaverBuilder
* SeedProd
* Flatsome
* Astra
* OceanWP
* Themify
* Brizy
* Visual Composer
* Live Composer
* Enfold
* Classic Editor WP
* Gutenberg
* SiteOrigin Page Builder
* Bricks
* Breakdance
* and nearly all other page builders and themes

= What exactly does LPagery do? =
LPagery lets you mass generate WordPress pages in bulk with custom data from your CSV or XLSX Files. You simply need to generate a template page with your placeholders where the data from the source file will be inserted.

= Is LPagery compatible with my SEO plugin? =
Yes! LPagery works with the most popular SEO Plugins on the market like Yoast SEO and RankMath SEO and lets you customize the meta data of your generated pages.

= Do I need local landing pages? =
If you own a business with your customers in a local area (e.g. Stores, Handyman, Moving Company, Events etc.) you can profit of landing pages that are fitted to your customers search and increase your SEO presence.

= Do I need to be a WordPress expert to use LPagery? =
Absolutely not! We designed LPagery to be easy to use. And if you encounter any issues feel free to contact us and we will help you with your problem!

== Privacy and Data Usage ==
Our plugin values your privacy and ensures compliance with relevant data protection regulations. The plugin includes optional integrations with the following services:

* **PostHog**
For gathering anonymized usage analytics to improve the plugin's functionality and user experience. All data is anonymized and no personal data is collected.

* **Sentry**
For tracking errors and debugging issues to ensure the stability and reliability of the plugin.

* **Enabling/Disabling**
You can manage your consent for these integrations via the plugin overview page in your WordPress admin dashboard via the opt-out button.

If consent is not granted, no data is sent to PostHog or Sentry.
You can revoke your consent at any time, and the integrations will be disabled immediately.
We are committed to transparency and your control over your data. For more information, please refer to our Privacy Policy.

== Changelog ==

= 2.5.4 - 2026-03-15 =
* Fix: Follow redirects when downloading images

= 2.5.3 - 2026-03-15 =
* Feat: Allow reassign template for page sets with not deleted templates

= 2.5.2 - 2026-02-13 =
* Fix: Keep global elements for Divi 5

= 2.5.1 - 2026-02-11 =
* Feat: Several WP-Admin Performance enhancements

= 2.5.0 - 2026-02-06 =
* Feat: Auto purge Elementor cache after creation
* Fix: Allow to ignore pages with slugs which already exist in other LPagery Page Set

= 2.4.13 - 2026-02-03 =
* Fix: Ensure correct boolean values when deserializing

= 2.4.12 - 2026-01-27 =
* Fix: Remove unnecessary query override

= 2.4.11 - 2026-01-18 =
* Feat: Divi 5 Support

= 2.4.10 - 2026-01-01 =
* Feat: Image lookup table to increase performance when image processing with large database
* Fix: Check user permissions before performing actions

= 2.4.9 - 2025-12-31 =
* Fix: Display error message

= 2.4.8 - 2025-12-30 =
* Feat: Add Debug Mode

= 2.4.7 - 2025-12-29 =
* Chore: Upgrade Dependencies

= 2.4.6 - 2025-12-12 =
* Fix: Support older mysql databases
* Fix: allow numbers as usernames in validation


= 2.4.5 - 2025-11-26 =
* Fix: Colibri CSS-Generation

= 2.4.4 - 2025-11-13 =
* Fix: Reduce maximum concurrent image preview requests to 5 to minimize server load


= 2.4.3 - 2025-11-05 =
* Chore: Update npm libraries

= 2.4.2 - 2025-09-22 =
* Fix: Error handling when server issue happens

= 2.4.1 - 2025-09-17 =
* Fix: Small UI improvements

= 2.4.0 - 2025-09-14 =
* 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

= 2.3.10 - 2025-09-12 =
* Chore: Update npm libraries
* Fix: CPT plural label

= 2.3.9 - 2025-09-01 =
* Fix: Return proper error message if cron job is not configured correctly
* Fix: autoload absolute path

= 2.3.8 - 2025-07-25 =
* Feat: LPagery App Sync

= 2.3.7 - 2025-07-24 =
* Fix: Several Google Sheet Sync validation fixes

= 2.3.6 - 2025-07-20 =
* Fix: check for string before base64_decode

= 2.3.5 - 2025-07-09 =
* Fix: Improve performance when confirming pages
* Feat: Show banner if there is a license/premium mismatch

= 2.3.3 - 2025-07-01 =
* Fix: Image processing for Flatsome
* Fix: Manually update invalid date handling

= 2.3.2 - 2025-06-25 =
* Fix: Add support for 0-dates (0000-00-00 00:00:00)

= 2.3.1 - 2025-05-18 =
* Feat: Repair Database Schema functionality
* Feat: Allow lpagery_parent with post url


= 2.3.0 - 2025-05-18 =
* 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

= 2.2.1 - 2025-04-28 =
* Fix: Allow replacements for non-ascii symbols
* Fix: Only enable numeric replacements if key and values are numeric
* Fix: Allow pending post status

= 2.2.0 - 2025-04-12 =
* Feat: Allow image metadata replacements for existing images
* Fix: Use get_permalink instead of get_page_link for interlinking


= 2.1.8 - 2025-04-08 =
* Fix: Deserialize Bricks Data before processing

= 2.1.7 - 2025-04-06 =
* 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

= 2.1.6 - 2025-03-22 =
* 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

= 2.1.5 - 2025-03-13 =
* Feat: Purge Cache after creating a page
* Feat: Use new API for fetching cities and google sheet data

= 2.1.4 - 2025-02-18 =
* Fix: Replace empty values in Google Sheet Sync


= 2.1.3 - 2025-02-11 =
* Fix: Fix merging existing and new slugs in ui for update
* Fix: urldecode slug before checking for duplicates

= 2.1.1 - 2025-02-10 =
* Fix: WP-Cron deserialization issue for null property

= 2.1.0 - 2025-02-08 =
* 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

= 2.0.23 - 2025-02-04 =
* Fix: Error Handling for Database Errors

= 2.0.22 - 2025-01-31 =
* Fix: Add caching layer for Attachment Search to prevent full table scans

= 2.0.21 - 2025-01-28 =
* Fix: Improve Attachment Search Query Performance
* Fix: Add support for spaces in slug configuration


= 2.0.20 - 2025-01-27 =
* Fix: Parsing Errors


= 2.0.19 - 2025-01-22 =
* Fix: Remove SQL Query which used JSON_ARRAYAGG (not available on some database engines)

= 2.0.18 - 2025-01-22 =
* Fix: Settings in free version

= 2.0.17 - 2025-01-22 =
* 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


= 2.0.16 - 2025-01-20 =
* 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

= 2.0.15 - 2025-01-10 =
* Fix: Find existing image when downloading and existing image is suffixed with "-scaled"

= 2.0.14 - 2025-01-10 =
* 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


= 2.0.13 - 2025-01-04 =
* 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

= 2.0.12 - 2025-01-03 =
* 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

= 2.0.11 - 2025-01-02 =
* Fix: Trigger next sync after current one is finished to prevent duplicated cron-events


= 2.0.10 - 2025-01-02 =
* Feat: Start Sheet Sync per Page Set via Manage
* Fix: Optimize Parallel Sheet Syncs
* Fix: Onboarding Styling

= 2.0.9 - 2024-12-27 =
* Fix: Image Processing case insensitive search
* Fix: Show correct duplicate header message

= 2.0.8 - 2024-12-25 =
* Fix: Trigger Sheet Sync after creating it
* Fix: allow numeric purposes

= 2.0.7 - 2024-12-23 =
* Fix: BeBuilder Image Processing
* Fix: Post permalink and type optional

= 2.0.6 - 2024-12-23 =
* Fix: Improve Wording
* Fix: Improve Attachment Query

= 2.0.5 - 2024-12-22 =
* 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


= 2.0.4 - 2024-12-17 =
* Chore: Update Freemius SDK

= 2.0.3 - 2024-12-17 =
* 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



= 2.0.2 - 2024-12-16 =
* Fix: Improve Deletion
* Fix: Improve UX of selection if pages should be overwritten
* Fix: Include Slugs with placeholders when checking for duplicates

= 2.0.1 - 2024-12-13 =
* Chore: Adapt Readme

= 2.0.0 - 2024-12-13 =
* 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

= 1.5.9 - 2024-10-29 =
* Fix: use secret based auth for google sheet sync

= 1.5.8 - 2024-09-22 =
* Feat: Using a Queue-Based approach for Google Sheet Sync
* Fix: Fix Image Search without ending

= 1.5.7 - 2024-09-12 =
* Fix: Increase Timeout at Google Sheet Sync
* Fix: Add backoff/retry mechanism to Google Sheet Sync


= 1.5.6 - 2024-09-11 =
* Fix: Google Sheet Sync pause each 100 pages
* Fix: Import Wordpress Files when using sync via API

= 1.5.5 - 2024-09-07 =
* Fix: JQuery Validator Compatibility issue
* Fix: Enhance Google Sheet Sync Error Message

= 1.5.4 - 2024-09-06 =
* Fix: Keep Status when updating
* Fix: Ignore invalid download urls and continue with the next one

= 1.5.3 - 2024-08-21 =
* Fix: MySQL Syntax

= 1.5.2 - 2024-08-21 =
* Fix: Drop legacy unique index if exists

= 1.5.1 - 2024-08-20 =
* Fix: Seedprod Page Creation

= 1.5.0 - 2024-08-09 =
* 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

= 1.4.33 - 2024-07-30 =
* Feat: New Request-Based Google Sheet Sync Mode
* Feat: Allow numeric placeholders without braces
* Fix: Cleanup Transients after page creations

= 1.4.32 - 2024-07-28 =
* Feat: Enable new pricing model

= 1.4.31 - 2024-07-24 =
* Fix: Improved string escaping mechanism to ensure better handling of special characters.

= 1.4.30 - 2024-07-21 =
* Fix: Do not slash taxonomy slugs when creating

= 1.4.29 - 2024-07-09 =
* Fix: Only set collate and charset if not empty during table creation

= 1.4.28 - 2024-07-05 =
* 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

= 1.4.27 - 2024-06-29 =
* Fix: Clear Divi Cache after creating page with Divi
* Fix: Do not slash strings when in json

= 1.4.26 - 2024-06-28 =
* Feat: Export Template Page
* Feat: Add Consistent Update Feature
* Fix: add slashes to ensure correctly escaped content

= 1.4.25 - 2024-06-21 =
* Fix: fix file import

= 1.4.24 - 2024-06-21 =
* 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


= 1.4.23 - 2024-06-19 =
* Fix: HTML structure of the plugin
* Fix: save processed slugs in backend
* Fix: check for placeholder in title case insensitive

= 1.4.22 - 2024-05-29 =
* Fix: Elementor CSS file creation
* Fix: Google Sheet Sync RAM Protection

= 1.4.21 - 2024-05-22 =
* Fix: increase performance when checking for duplicated slugs

= 1.4.20 - 2024-05-19 =
* Fix: add wpml legacy support
* Feat: improve input validation before creating pages

= 1.4.19 - 2024-05-11 =
* Fix: do not format blocks if kadence is active
* Fix: freemius sdk upgrade

= 1.4.17 - 2024-04-02 =
* Fix: allow 0 as replacement value
* Fix: perform image processing after replacing to prevent urldecode issues in HTML content


= 1.4.16 - 2024-04-01 =
* Fix: use maybe_unserialize instead of unserialize to prevent deserialization issues


= 1.4.15 - 2024-03-28 =
* 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

= 1.4.14 - 2024-03-27 =
* Fix: Check for array is null in media replacement


= 1.4.13 - 2024-03-23 =
* 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

= 1.4.12 - 2024-03-12 =
* Fix: Download CSV works again

= 1.4.11 - 2024-03-08 =
* 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


= 1.4.10 - 2024-03-06 =
* Fix: Use Transients to make sure the Google Sheet runs only once at the same time

= 1.4.9 - 2024-02-24 =
* Fix: Database Migration Issue
* Fix: Trim Fields in Grid for Free Version


= 1.4.8 - 2024-02-20 =
* Feat: Add enfold support

= 1.4.7 - 2024-02-15 =
* 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

= 1.4.6 - 2024-02-12 =
* Fix: Include image PHP file when Syncing via Cron

= 1.4.5 - 2024-02-06 =
* Fix: Add Legacy Support for Table creation

= 1.4.4 - 2024-02-05 =
* Fix: Increase Google Sheet Timeout

= 1.4.3 - 2024-02-04 =
* Feat: Downloading Images
* Fix: Use wp_remote_get to retrieve google sheet json
* Fix: Google Sheet Sync Timeout Limit


= 1.4.2 - 2024-01-30 =
* Fix: Add support for large inputs (> 6MB)


= 1.4.1 - 2024-01-22 =
* Fix: Add legacy MySql Support
* Fix: Upsert Process Error Handling

= 1.4.0 - 2024-01-22 =
* Feat: add google sheet sync
* Feat: add Gutenberg Blocks Support
* Feat: Update pages by Slug and not by ID

= 1.3.6 - 2024-01-13 =
* Fix: add support for big input files
* Fix: provide null-safety when accessing vars

= 1.3.5 - 2024-01-10 =
* 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

= 1.3.4 - 2024-01-08 =
* Fix: correct js script enqueue order

= 1.3.3 - 2023-12-23 =
* Fix: fix fifu caching issues


= 1.3.2 - 2023-12-23 =
* Feat: Add fifu support

= 1.3.1 - 2023-12-22 =
* Fix: Add PHP 7.x support

= 1.3.0 - 2023-12-20 =
* Feat: Add importing post attributes from sheet
* Feat: Allow to set post publish date

= 1.2.18 - 2023-11-29 =
* Feat: Add missing file

= 1.2.17 - 2023-11-29 =
* Feat: Add WPML support

= 1.2.16 - 2023-11-24 =
* Fix: Filter for all posts in History possible
* Fix: Searching process in Dashboard possible
* Feat: Template delete protection
* Feat: History UI more clear

= 1.2.15 - 2023-10-22 =
* Fix: save css for BeBuilder posts


= 1.2.14 - 2023-10-20 =
* Feat: add support for BeBuilder


= 1.2.13 - 2023-10-03 =
* 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

= 1.2.12 - 2023-09-28 =
* Feat: add freemius menu
* Fix: regex for detect placeholders inside html to prevent broken pages created

= 1.2.11 - 2023-09-13 =
* Feat: add support for nested placeholders
* Feat: add support for mpg placeholders

= 1.2.10 - 2023-08-26 =
* Feat: allow adding categories and tags from input file
* Feat: add shortcode for displaying created pages

= 1.2.9 - 2023-08-25 =
* Fix: sending radius filter when fetching cities
* Fix: adding aioseo support

= 1.2.8 - 2023-08-15 =
* Fix: Add str_ends_with and str_starts_with compat methods

= 1.2.7 - 2023-08-03 =
* Feat: Add permalink to csv download
* Fix: Move bulk deletion to browser to prevent timeout issues

= 1.2.6 - 2023-07-05 =
* Feat: Updated Freemius SDK to the latest version

= 1.2.5 - 2023-06-27 =
* Fix: trim long header names in modal
* Fix: allow to have curly brackets around the headers

= 1.2.4 - 2023-06-21 =
* Fix: remove mixed type

= 1.2.3 - 2023-06-21 =
* Fix: Escape css vars in created pages

= 1.2.2 - 2023-06-06 =
* Fix: Add new version to asset enqueues to prevent browser caching issues

= 1.2.1 - 2023-06-04 =
* Fix: Fix newlines only on HTML content

= 1.2.0 - 2023-05-25 =
* Feat: Bulk update and delete created pages

= 1.1.11 - 2023-04-28 =
* Fix: Use WP_MAX_MEMORY_LIMIT instead of WP_MEMORY_LIMIT

= 1.1.10 - 2023-04-27 =
* 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

= 1.1.9 - 2023-03-28 =
* Fix: register str_contains if not exist (legacy support)
* Feat: allow plain HTML in placeholder

= 1.1.8 - 2023-03-26 =
* 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

= 1.1.7 - 2023-03-21 =
* Fix: no more error is thrown when using the image processing with xlsx/google sheet

= 1.1.6 - 2023-03-16 =
* Fix: deactivate free version when upgrading to pro
* Fix: trigger elementor save to prevent caching issues
* Feat: csv validation

= 1.1.5 - 2023-02-13 =
* Fix: encode with utf-8 when parsing html

= 1.1.4 - 2023-02-12 =
* Fix: only replace content if type is string

= 1.1.3 - 2023-02-10 =
* Fix: add version to modal enqueue

= 1.1.2 - 2023-02-10 =
* 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

= 1.1.1 - 2023-02-07 =
* Fix: unique ids for HTML elements

= 1.1.0 - 2023-02-06 =
* Feat: add support for not hierarchical post types
* Feat: add image Processing (pro only)
* Fix: remove all "\n" from content

= 1.0.14 - 2023-01-01 =
* 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

= 1.0.13 - 2022-11-27 =
* Fix: remove adding license key to enqueues
* Fix: stop page creation if error occurs

= 1.0.12 - 2022-11-18 =
* 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

= 1.0.11 - 2022-11-06 =
* Fix: escape newlines when having json content
* Fix: uri-decode each json element separately
* Fix: only replace if value is type string

= 1.0.10 - 2022-11-04 =
* Fix: escaping quotes in json content
* Fix: uri-encode payload when sending to backend

= 1.0.9 - 2022-11-03 =
* Feat: auto detect csv delimiter
* Fix: substitution handling of json content
* Fix: missing columns when reading xlsx files
* Fix: optimize input validation


= 1.0.8 - 2022-10-29 =
* Fix: Disable Spintax default setting

= 1.0.7 - 2022-10-03 =
* Feat: Add freemius support for trial version

= 1.0.6 - 2022-09-27 =
* Fix: In case of an error, show the details to simplify error reporting

= 1.0.5 - 2022-09-13 =
* Fix: CSS in the modal grid (edit buttons)
* Fix: saving the settings with empty custom post types works now

== Screenshots ==

1. LPagery Dashboard & Confirmation Modal
2. LPagery How it works
3. LPagery Step 1 Create a Template Page
4. LPagery Step 2 Create a Source File
5. LPagery Step 3 Select Template and Source File
6. LPagery Step 4 Confirm and Create Pages
7. LPagery The Resulting Pages
8. LPagery Onboarding
