=== Bitbetrieb CSV Page Generator ===
Contributors: bitbetrieb
Donate link:
Tags: seo, landing pages, csv, virtual pages, sitemap
Requires at least: 6.0
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.0.6
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Create scalable virtual SEO landing pages from CSV files – without cluttering your WordPress backend with hundreds of real pages.

== Description ==

Bitbetrieb CSV Page Generator is a WordPress plugin for professionally creating scalable SEO landing pages.
Instead of manually creating each page, landing pages are generated dynamically from a CSV file and rendered at runtime.

The pages are based on a central HTML template with placeholders. Content, URLs, and SEO metadata such as title, meta description, robots directives, and canonical URLs are fully controlled via the CSV file.
The pages exist as virtual pages and do not create hundreds or thousands of database entries in WordPress.

This plugin is designed for agencies, SEO professionals, and businesses that need structured and scalable SEO setups — without copy-paste workflows and without technical inconsistencies.

**Important**: Bitbetrieb CSV Page Generator is not a content automation tool. It provides the technical foundation for scalable SEO landing pages, but it does not replace a content or SEO strategy.

== Features ==

* Virtual SEO landing pages generated from CSV files
* No creation of physical WordPress pages
* Template system with placeholders
* Control over title, meta description, robots, and canonical tags
* Configurable URL structure
* Per-page display mode for internal links: list, inline text, or hidden
* Dedicated sitemap and integration with WordPress core sitemaps
* Suitable for agency and SEO projects with high scalability requirements

== Installation ==

1. Upload the plugin to the /wp-content/plugins/bitbetrieb-csv-page-generator/ directory
2. Activate the plugin through the WordPress admin panel
3. Open the menu item "Bitbetrieb CSV Page Generator"
4. Upload a CSV file and define your template

== Frequently Asked Questions ==

= Are real WordPress pages created? =
  No. All landing pages are delivered dynamically as virtual pages.

= Is the plugin suitable for large CSV files? =
  Yes. The plugin is designed to handle large CSV files. Depending on your hosting environment, PHP limits may need to be adjusted.

= Is the plugin multilingual? =
  The admin interface is currently in German. Translation support is planned for a future release.

= Does the plugin automatically generate good content? =
  No. The plugin supports the technical delivery of content, but it does not replace a content or SEO strategy.

== Changelog ==

= 1.0.6 =
* Plugin Check fixes: replaced `readfile()` and `parse_url()` with WP-API equivalents (`WP_Filesystem::get_contents()` / `wp_parse_url()`).
* `$_SERVER['REQUEST_URI']` is now sanitized via `esc_url_raw( wp_unslash( … ) )` before parsing.
* Removed the redundant `load_plugin_textdomain()` call (unnecessary since WordPress 4.6 for plugins hosted on WordPress.org).
* Renamed remaining unprefixed globals (`$GLOBALS['cpg_current_virtual_page']` → `bbcpg_current_virtual_page`).
* Wrapped the uninstall script in an anonymous function so its locals do not leak into the global scope.

= 1.0.5 =
* Security: All filter callbacks that return strings rendered to HTML now apply context-appropriate output escaping (`wp_kses_post()` for `the_title`, `esc_html()` for `pre_get_document_title` / `wpseo_title`, `esc_attr()` for `wpseo_metadesc`). Closes the unescaped-callback-return finding from the WordPress.org plugin review.

= 1.0.4 =
* New: Per-page display mode for the `{{internal_links}}` section. Each virtual page can be set to "List" (default), "Inline text", or "Hidden" via the Virtual Pages admin table. Prevents link-farm appearance when managing large numbers of thematically similar pages.

= 1.0.3 =
* Renamed plugin to "Bitbetrieb CSV Page Generator" for a distinctive, unambiguous directory name.
* Hardened nonce handling with wp_unslash() and sanitize_text_field() on all $_POST nonce inputs.
* Replaced external Font Awesome CDN dependency with WordPress Dashicons (no external assets).
* Unified all function, option, constant and hook prefixes to bbcpg_ / BBCPG_.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.0.6 =
Cleans up findings reported by the WordPress Plugin Check tool (filesystem API, URL parsing, REQUEST_URI sanitization, prefixed globals, uninstall scoping). No functional changes.

= 1.0.5 =
Hardens output escaping in filter callbacks (the_title, document title, Yoast title/metadesc) per WordPress.org plugin review feedback.

= 1.0.4 =
New per-page display mode for internal links. Configure each virtual page as "List", "Inline text", or "Hidden" directly in the Virtual Pages admin table.

= 1.0.3 =
Renamed plugin and hardened security (nonce sanitization, removal of external CDN dependency). No data loss – existing options are migrated automatically.

= 1.0.0 =
First stable release.
