Removed: Coffee/donation timed notice that was flagged as trialware/license check.
Added: Simple one-time review notice (appears once after 7 days, permanently dismissible).
2.0.7
Changed: Plugin renamed to “2FOX4 Translate to English” for WordPress.org directory compliance.
Changed: Updated plugin slug to “2fox4-translate-to-english”.
Changed: Updated text domain to “2fox4-translate-to-english”.
Fixed: Plugin URI updated to valid URL.
2.0.6
Fixed: Proper nonce verification for all $_GET/$_REQUEST parameters in translations list table (no more phpcs:ignore exceptions).
Fixed: Added PayPal donate link disclosure to External Services section for WordPress.org compliance.
Fixed: Removed unused admin notices class (dead code from earlier refactoring).
Fixed: Translation view link in Posts/Pages list now correctly includes the /en/ URL prefix.
2.0.5
Fixed: Plugin header now uses standard GPL-2.0-or-later license identifier.
Fixed: Updated minimum requirements to WordPress 6.4 and PHP 8.0.
Fixed: Data migrator now correctly publishes machine and reviewed translations during v1 to v2 migration.
Fixed: Uninstall routine now removes all plugin options including migration flags.
Added: Coffee donation notice refactored to follow standard template structure.
Added: Translation template file (2fox4-translate-to-english.pot) for internationalization.
2.0.4
Fixed: Translated pages were invisible to non-logged-in visitors (404 error). Machine and reviewed translations were incorrectly saved as WordPress drafts instead of published posts.
Added: One-time upgrade routine that automatically publishes all existing translations affected by this bug.
2.0.3
Added: Translation status column in the Posts and Pages list tables showing which content has been translated.
Added: Direct links to view the translated page on the frontend and edit the translation from the list table.
Fixed: Inline Test Connection buttons on the settings page now work correctly for each provider.
Fixed: Script blocks are now preserved during translation, preventing JavaScript (e.g., FAQ accordions) from being destroyed by the translation API.
2.0.2
Added: Elementor page builder support — translations now preserve the full Elementor layout and design.
Added: Translatable text is extracted from Elementor widget settings (_elementor_data) and translated alongside post content.
Added: Elementor meta fields (_elementor_edit_mode, _elementor_template_type, _elementor_version, etc.) are copied to translation posts.
Added: Style block extraction for Elementor editor widgets to prevent CSS corruption during translation.
Fixed: Pages built with Elementor lost all formatting when translated (displayed as plain content without layout).
2.0.1
Fixed: All output escaping issues in exception messages across translation providers.
Fixed: Unordered placeholders in provider factory error messages.
Fixed: Input sanitization and nonce verification in translation editor.
Fixed: Added wp_unslash() to all $_POST data before sanitization.
Fixed: Replaced wp_redirect() with wp_safe_redirect() in language router.
Fixed: Removed deprecated load_plugin_textdomain() call (handled by WordPress 4.6+).
Fixed: Added direct file access protection to all PHP files.
Fixed: Prefixed all global variables in uninstall.php and dashboard template.
Fixed: Wrapped error_log() with WP_DEBUG check.
Fixed: Updated “Tested up to” to WordPress 6.9.
2.0.0
Major architecture change: Translations are now stored as native WordPress posts and pages instead of custom database tables.
Full compatibility with SEO plugins (Yoast SEO, RankMath) — meta descriptions, Open Graph tags, and structured data work automatically.
Translated pages now appear in XML sitemaps.
Added hidden translatetoenglish_language taxonomy for internal language tagging.
Added bidirectional post meta linking between originals and translations.
Translations are hidden from normal Posts/Pages admin lists.
Added automatic data migration from v1 custom tables to native posts.
Simplified URL routing — translations are real posts with their own slugs.
Bidirectional hreflang tags work on both German and English pages.
Removed content replacement filters (no longer needed since WordPress serves translation content directly).
Added pre_get_posts filter to exclude English translations from default queries.
Dashboard and REST API statistics now correctly exclude translation posts from total content count.
Improved uninstall cleanup: removes translation posts, meta data, taxonomy terms, and legacy tables.
1.0.1
Fixed: PHP fatal error caused by reserved keyword usage in REST controller.
Fixed: Translated slug resolution in URL router.
Fixed: Translation service now correctly passes source and target language to providers.
Fixed: Redirect now uses translated slug instead of original slug.
1.0.0
Initial release.
Translation support for Posts and Pages.
Three translation providers: DeepL, OpenAI, Google Cloud Translation.
Automatic browser language detection with redirect.
SEO-friendly /en/ URL structure with hreflang tags.