# Changelog — JPKCom Simple Lang

> Versionsverlauf des WordPress-Plugins JPKCom Simple Lang.

Source: https://www.jpkc.com/db/changelog/jpkcom-simple-lang/

Versionsverlauf von [`jpkcom-simple-lang`](https://github.com/JPKCom/jpkcom-simple-lang). Die Einträge stammen unverändert aus der README des Projekts. Eine ausführliche Anleitung mit Tipps findest du im [Projekt-Guide](https://www.jpkc.com/db/guides/jpkcom-simple-lang/).

## 1.2.3 - 2026-06-16
* Raised the minimum WordPress version to 6.9 and "Tested up to" to WordPress 7.0
* Switched license metadata to the SPDX identifier `GPL-2.0-or-later` with the HTTPS license URI

## 1.2.2 - 2026-06-16
* Security: updater prefers an exact match against the manifest `download_url` over the slug heuristic, so a tampered manifest can no longer bypass the checksum gate
* Security: timing-safe checksum comparison (`hash_equals()`) with an `is_string()` guard against `hash_file()` failures
* Security: manifest fetch via `wp_safe_remote_get()` (SSRF defense-in-depth)
* Fixed PHP warning and missing contributor names in the plugin detail popup (`display_name` now provided)
* Fixed PHP warning/deprecation on `wp plugin list` by completing the `no_update` transient entry (`new_version`, `package`, `tested`, `requires_php`)

## 1.2.1 - 2026-03-13

**Bug Fixes**

- Fixed manual ZIP upload failing with "No valid URL" error caused by checksum verification running on local file paths instead of remote URLs
- Fixed release ZIP missing top-level plugin directory, preventing WordPress from recognizing it as an update to the existing installation

## 1.2.0 - 2026-03-13

**Bug Fixes**

- Fixed language selection not saving for locales without country code (e.g. `ar` for Arabic)
- Updated locale validation regex to accept both short (`xx`) and full (`xx_XX`) locale formats

## 1.1.1 - 2025-12-17

**Bug Fixes**

- Fixed duplicate "Settings saved" message on admin settings page
- Fixed Oxygen Builder conditions not displaying dropdown options
- Fixed Oxygen Builder condition callback signatures to match API requirements

**Improvements**

- Updated Oxygen Builder conditions to use correct API structure with 'options' array
- Added proper operator support (==, !=) for "Post Language Is" condition
- Added Yes/No dropdown options for boolean Oxygen conditions
- Added German translations for Oxygen condition options (Ja/Nein)
- All Oxygen conditions now appear under "Simple Lang" category

**Technical Changes**

- Renamed callback functions to match Oxygen API conventions:
  - `jpkcom_simplelang_oxygen_post_language_is()` with ($value, $operator) parameters
  - `jpkcom_simplelang_oxygen_has_custom_language()` with ($value, $operator) parameters
  - `jpkcom_simplelang_oxygen_uses_default_language()` with ($value, $operator) parameters
- Removed redundant `settings_errors()` call in admin settings page

## 1.1.0 - 2025-12-17

**New Features**

- **Translation Links**: New meta box for linking posts in different languages
- **Hreflang Tags**: Automatic generation of SEO-friendly `<link rel="alternate" hreflang="">` tags
- **Bidirectional Linking**: Posts automatically link to each other when translation links are created
- **Complete Translation Sets**: All posts in a translation group are automatically linked together
- **Smart Validation**: Prevents duplicate languages in translation sets

**Bug Fixes**

- Fixed locale detection for default site language in translation grouping
- Fixed type casting issue in translation link display
- Improved meta data consistency across all translation sync operations

**Improvements**

- New helper function: `jpkcom_simplelang_get_site_default_locale()`
- Enhanced hreflang output with deterministic sorting
- Performance optimization: Single query for all translation posts (prevents N+1 queries)
- Updated German translations (de_DE and de_DE_formal)

**Developer Notes**

- New module: `includes/hreflang-translations.php`
- New meta key: `_jpkcom_simplelang_translations` (multiple entries per post)
- All translation sync operations use loop prevention for data integrity

## 1.0.0 - 2025-12-16

**Initial Release**

- Language selection dropdown in post editor sidebar
- Support for all WordPress core languages
- Post type activation settings page
- Frontend locale override (HTML lang attribute and SEO plugin compatibility)
- Oxygen Builder conditional logic integration
- Helper functions for developers
- Template override system
- Automatic GitHub-based updates
- German translations included
- Full documentation and API docs

