*** Bulk Content Toolkit Changelog ***

2026-10-14 - version 1.6.0
* New: WooCommerce variations — "Bulk edit by attribute" panel in the Variations tab of a variable product. Set one value per attribute value (one price per size, one image per colour, also sale price, stock, weight, dimensions, shipping class), preview the changes, apply them to all matching variations, and undo the last apply. Only loaded when WooCommerce is active.
* Security: Bulk edit now requires the native list-table nonce and only writes to posts of the same type that the current user can edit.
* Security: Quick Edit / Bulk Edit AJAX readers check edit_post and only return fields configured for the post type.
* Fix: Meta keys with uppercase letters or dots are no longer altered, so Quick Edit pre-fill works for them. A real meta key starting with "custom_" is no longer mangled in bulk state detection.
* Fix: The "switch" input type is stored as "checkbox" (it is not a value of the settings table ENUM).
* New: Each selected field has a "Column" checkbox on the settings screen. Untick it to keep a field in Quick Edit / Bulk Edit without adding a column to the list table (useful on crowded lists such as WooCommerce products). Default: all fields shown, as before.
* Fix: Columns added to the list table are no longer squeezed to zero width on desktop (typical on WooCommerce products). Each gets a width suited to its type and header, and long values wrap inside the cell.
* Cleanup: Removed an unused admin-post handler.

2026-08-25 - version 1.5.0
* Compatibility: Tested up to WordPress 7.1.
* New: Per-field input type dropdown on the settings screen.
* Fix: Saving the field list no longer re-samples types for fields you already configured.
* New: “Re-detect now” option when you explicitly want the sampler to run again.
* New: Undo the last bulk edit from the post list notice.
* New: Number fields can Increase / Decrease / Change by % without replacing the value.

2026-05-20 - version 1.4.3
* Fix: WooCommerce is optional; removed WC requires at least header.

2026-05-20 - version 1.4.2
* Bump: WP V7
* Fix: Bulk edit switches no longer double-prefix field names (custom_custom__*) — mixed yes/no now shows centered indeterminate state and saving without clicking leaves posts unchanged.
* Fix: Indeterminate switch styling via .bct-indeterminate class (works when native :indeterminate is not painted).
* Fix: PHP bulk checkbox save ignores any submitted value other than yes, no, or indeterminate.
* Improvement: More WooCommerce internal meta keys blocked from the field picker.
* Cleanup: Removed unused files (display.php, admin.js, bulk-actions.php, core-functions.php) and dead bulk-actions dropdown hooks.
* Dev: Central debug helper (bulkedittoolkit_log) — single PHPCS ignore; JS logs gated by UserScriptParams.debug (WP_DEBUG or BULKEDITTOOLKIT_DEBUG).

2026-05-19 - version 1.4.1
* Fix: Quick edit checkbox now uses a hidden input — unchecking reliably submits 'no' instead of being silently ignored.
* Fix: LearnPress boolean fields (_lp_coming_soon and 12 others) now write '' for false instead of 'no', matching LearnPress native storage convention.
* Fix: WooCommerce boolean fields normalized to 'yes'/'no' on write.
* Fix: Switch pre-population in quick edit now updates the hidden input, not just the visual checkbox.
* Fix: Delegated click handler keeps hidden input in sync with checkbox state after user interaction.

2026-05-19 - version 1.4.0
* New: **Field Search** — live filter input above the Available Fields list on the settings page. Instantly narrows down fields by name, useful on sites with 50+ meta keys.

2026-05-16 - version 1.3.0
* Security: Replaced all wp_redirect() with wp_safe_redirect() + exit.
* Security: Added isset() + wp_unslash() on all $_POST/$_REQUEST accesses before sanitization.
* Security: Removed unauthenticated AJAX hook on get_bulk_edit_statuses.
* Security: Fixed SQL injection risk — table names now passed through esc_sql().
* Security: Added explicit nonce verification on the quick edit save path.
* Fix: Fatal PHP error in checkbox type detection — missing $ on variable name, checkbox auto-detection was completely broken.
* Fix: Double-prefix bug on checkbox field key in bulk save — unchecking a field in bulk edit had no effect.
* Fix: Hidden input and checkbox no longer share the same name attribute — unchecking now saves correctly.
* Fix: Select "no change" logic — empty string now correctly skips the field.
* Fix: date() replaced with gmdate() in 8 places to avoid runtime timezone drift.
* Fix: i18n placeholders in _n() corrected, missing translators comment added.
* **Mixed State Checkboxes**: Initializes to indeterminate when selected posts have different values. Saving without touching leaves all posts unchanged.
* **Mixed State Selects**: Initializes to "— No change —" when values differ. Saving without changing leaves all posts unchanged.
* **Quick Edit Pre-population**: All field types now load the post's current value when the row opens.
* **Column Display**: Checkboxes show a dashicon, dates use WP date format, long text truncated at 40 chars, URLs show domain only.
* **Screen Options**: Each column can be individually shown/hidden per user via the native WP Screen Options panel.
* **Field Discovery**: Rewritten with a single SQL JOIN + DISTINCT — dramatically faster on large catalogs.
* **Settings Cache**: wp_cache_get/set with 5 min TTL — settings table no longer queried on every page load.
* **Field Type System**: New field-types.php centralizes known_types and blocked_keys registries.
* **Type Sampler**: Rewritten with 80% vote threshold — a single outlier no longer causes a field to be mistyped.
* **i18n**: All hardcoded strings replaced with English base strings via __() and esc_html_e().

2025-10-01 - version 1.2.9
* Compatibility: Verified and bumped tested up to WordPress 6.9.

2025-09-15 - version 1.2.8
* Fix: Select tag gathered with wrong method in bulk edit.

2025-09-10 - version 1.2.7
* Fix: Select and switch fields definitively handled in bulk edit.

2025-09-01 - version 1.2.5
* Fix: CSS was overstepping its own scope due to a bad condition.

2025-08-28 - version 1.2.4
* Fix: "No Change" option for select fields in bulk edit now correctly prevents unintended updates.

2025-08-27 - version 1.2.2
* Improvement: Clearer bulk edit interface.

2025-08-26 - version 1.2.1
* Fix: Select fields now require at least two distinct values to display as a select input.

2025-08-25 - version 1.2.0
* New: **Known Types System** — hardcoded map of WooCommerce and LearnPress meta keys to their correct input type.
* New: Reset and Rebuild button — remove and re-add a field to force type re-detection.
* Improvement: AJAX handling for Quick Edit reworked.

2025-08-24 - version 1.1.0
* Improvement: Styling for toggle switches and select fields.
* Fix: Select fields rendering incorrectly in quick edit row.

2025-08-22 - version 1.0.0
* Initial release.
