=== hallowebsite RowEdit Columns ===
Contributors: hallowebsite
Tags: admin columns, inline edit, acf, jetengine, toolset, meta box, pods, yoast, woocommerce, bulk edit
Requires at least: 6.2
Requires PHP: 7.4
Stable tag: 1.6.1

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 boxes, CPT meta fields and user fields (checkbox, switcher, timestamp dates, media formats)
* Toolset Types fields per field group (dates as timestamps, image URLs, checkboxes, selects, repeating images)
* Meta Box (metabox.io) and Pods fields, saved through their own APIs
* Yoast SEO: title, meta description, focus keyphrase, canonical, indexing, nofollow, cornerstone, social titles/descriptions, scores
* Columns from any other plugin can be placed in a layout (e.g. Yoast SEO score)
* 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.6.1 =
* Rebranded to hallowebsite RowEdit Columns (author: hallowebsite, https://hallowebsite.de). No functional changes.


= 1.6.0 =
* Fixed duplicate columns: layouts now replace columns on the final screen-level filter, so columns added late by Yoast SEO or any other plugin no longer appear next to RowEdit's own.
* Native columns from WordPress and other plugins can be placed in a layout. Columns RowEdit can edit itself (title, author, taxonomies, Yoast title/description/keyphrase, WooCommerce SKU …) are offered once, as the editable RowEdit version.
* New "Start from current columns" turns the current list into a layout in one click.
* Quick Edit, row actions and comment reply keep working when a layout is active.
* New providers: Toolset Types, Meta Box, Pods. JetEngine: CPT meta fields, user fields, classic checkbox storage.
* Extended Yoast SEO fields; values equal to Yoast defaults are removed so inheritance keeps working.
* ACF "_field" reference keys and plugin bookkeeping keys are no longer listed as duplicate fields.
* Custom-field discovery is one cached query instead of one query per key on every list page.
* Layout saving is immune to PHP max_input_vars; layouts of inactive post types are kept.
* Configured custom fields no longer disappear when no item stores a value yet.
* Sorting by a custom field keeps rows without a value; filters are a per-column choice with "empty" / "has value" options.
* CSV export/import for every list (posts, CPTs, media, terms, users, comments).
* History page shows item names and has a Revert button. History table upgrades correctly after ZIP updates.
* Redesigned, square admin UI: list navigation, side-by-side column picker, cleaner inline editor and bulk bar with find & replace.

= 1.5.12 =
* Keep post/CPT list column headers visible while scrolling, below the WordPress toolbar.
* Hide unrecognized database-only fields from Add columns by default, with an explicit switch to show them.
* Identify database-only fields and show storage keys; preserve existing selected columns and all stored data.

= 1.5.11 =
* Normalize gallery IDs, comma-separated values, arrays, JSON and serialized arrays for thumbnail previews and media editors.
* Add per-column thumbnail preview limits (1–50, default 4) with a remaining-item count.
* Show Toolset image fields, including repeated meta values, as read-only thumbnails.
* Add an explicit gallery preview mode for other custom metadata without rewriting its storage.
* Preserve the plugin identity, taxonomy checkboxes and Yoast resolution.

= 1.5.10 =
* Use simple checkbox selection for taxonomy editors, retaining selected terms and inline creation with parent selection.
* Preserve the existing plugin directory and main file for in-place upgrades.

= 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.
