=== RowEdit Columns Pro ===
Contributors: openai
Tags: admin columns, inline edit, acf, jetengine, woocommerce, bulk edit
Requires at least: 6.2
Requires PHP: 7.4
Stable tag: 1.5.9

Extensible WordPress admin columns with inline and bulk editing.

== Features ==
* Posts, pages and public custom post types
* Users, terms/taxonomies and comments
* WordPress core fields and taxonomy columns
* Automatic post/user/term/comment meta discovery
* ACF field discovery and native get_field/update_field handling
* JetEngine meta-box discovery when available, with generic-meta fallback
* WooCommerce product fields using WC CRUD methods
* Inline text, textarea, number, email, URL, date/time, boolean, select, multiselect, taxonomy, role, media, post and user editors
* Native WordPress Media Library picker
* Sorting and practical post-list filtering
* Bulk editing with set/clear/increase/decrease/percentage/append/prepend/add/remove operations
* Per-object list layouts, drag ordering and custom labels
* Audit history and one-click inline undo
* CSV export and ID-based CSV update import
* Field/provider filters and registration hooks for extensions

== Safety ==
Complex serialized/repeater/flexible-content values are read-only unless a provider explicitly exposes a safe editor. Core, ACF and WooCommerce values use their native update APIs where practical.

== Developer API ==
Register a provider during `rowedit_columns/register_providers` by calling `$registry->register( $provider )`. Providers implement `RowEdit_Field_Provider`.
Listen for updates using `rowedit_columns/value_updated`.
Filter discovered fields using `rowedit_columns/discovered_fields`.

== Notes ==
This is a broad v1 implementation. Third-party plugins can store data in undocumented or custom structures, so production sites should test their exact field configurations on staging before bulk editing.

== Changelog ==

= 1.5.9 =
* Preserve raw Yoast templates/inheritance in editors, history and CSV; use Yoast variable replacement for row display and discover fields before per-post overrides exist.
* Enforce role promotion, publishing, author, taxonomy and metadata permissions; protect lookup results and validate bulk object contexts.
* Fix bulk form submission, repeated clicks and relationship selection loss.
* Normalize media restoration/import, ACF dates and JetEngine timezone-aware timestamps; return editor-formatted values after saves.
* Protect unsupported structured ACF fields with read-only editors; accept unchanged ACF saves.
* Map WooCommerce query storage keys, preserve legacy configured field IDs and remove duplicate generic fields.
* Validate CSV structure before import; reject malformed rows instead of silently clearing missing cells.
* Detect undo conflicts, track Add/Remove layout changes, add media/comment table hooks and restore an edit link for post titles.
* Disable unsupported core filters and computed Yoast sorting/filtering.

== Upgrade notes for 1.5.9 ==
Install this ZIP as an update to the existing rowedit-columns-pro plugin. Back up the database first and validate on staging.
Existing field IDs and saved layouts are preserved. Yoast row text is generated; its editor retains the original template or empty inherited source.
Structured ACF Link, Map, Page Link, Password and multi-user fields are intentionally read-only until dedicated editors exist.
Yoast sorting/filtering is disabled because raw SQL cannot reliably sort resolved templates.
This release does not add named saved views, non-post CSV import/export, transactional bulk rollback or full native WordPress row actions.
CSV export is a raw round-trip data format, not a sanitized spreadsheet report; treat untrusted cell contents as data.
Yoast display uses its template replacement service. Custom frontend-only presentation filters may still require site-specific integration.
Syntax and isolated regression tests do not replace integration testing with the site's actual plugin versions.


= 1.5.2 =
* Package ZIP now uses the stable rowedit-columns-pro plugin directory so WordPress replaces/upgrades the existing installation instead of installing a sibling copy.


= 1.5.1 =
* Yoast SEO title and meta description columns now reflect inherited post-type Search Appearance defaults when no per-page override is stored.
* Inherited Yoast defaults remain unsaved until explicitly edited, preserving Yoast inheritance.


= 1.4.3 =
* Bulk Author/User/Post/Term fields now use searchable pickers bound to existing WordPress objects.
* User search includes display name, login, email, nicename and numeric user ID, with a larger result set.
* Bulk controls now match each field type and only show meaningful operations.
* Bulk select, taxonomy, role, boolean, date, media and multi-value fields use their appropriate editors instead of a plain text input.

= 1.2.1 =
* Fixed stale admin asset caching caused by an outdated internal version constant.
* Perfectly centered compact Save/Cancel icons in inline editors.
= 1.1.1 =
* Added explicit Save and Cancel controls to every inline editor.
* Textareas such as Content and Excerpt now save with the Save button or Ctrl/Cmd+Enter while Enter continues to insert line breaks.
* Fixed cleanup of relationship-picker UI when cancelling or completing an edit.

= 1.2.0 =
* Reworked inline editor into a compact floating popover that does not expand list-table rows.
* Single Author/User/Post/Term fields now use one autocomplete control instead of search + dropdown.
* Compact icon-only save/cancel controls with native WordPress styling.
* Refined hover edit/clear actions and spacing for a more Admin Columns-like workflow.

= 1.3.0 =
* Schema-aware JetEngine field typing, including media/gallery storage formats and timestamp dates.
* Generic meta duplicates are hidden when ACF/JetEngine/WooCommerce provides the same field key.
* Media values render as media even when JetEngine stores URL or ID+URL arrays.

= 1.5.4 =
* Resolve Yoast inherited title variables directly in admin list rows, independent of Yoast frontend context.
