=== Savvy Posts Grid ===
Contributors: savvyprogrammers
Tags: elementor, posts grid, ajax filter, acf, pagination
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: [https://www.gnu.org/licenses/gpl-2.0.html](https://www.gnu.org/licenses/gpl-2.0.html)

High-performance Elementor posts grid with AJAX search, dynamic filters, pagination, and template-based cards.

== Description ==

Savvy Posts Grid is a developer-grade posts grid widget for the Elementor page builder,
built for large sites. It renders posts/pages/CPTs in a responsive grid and layers on:

* **AJAX search** — live, 300ms-debounced, preserves active filters.
* **AJAX pagination** — numbered, load-more, or infinite scroll.
* **Off-canvas filters** — slide-in panel (left/right), mobile friendly.
* **Dynamic filter builder** — native fields (categories, tags, author, date,
  post type) and auto-detected ACF fields (select, checkbox, radio, taxonomy,
  true/false, number, text, relationship, post object), each as a dropdown,
  checkbox list, radio buttons, button group, or toggle switch, with AND/OR
  logic and combined tax_query / meta_query generation.
* **Elementor template cards** — render each post through a saved Elementor (or
  Elementor Pro) template; dynamic tags resolve against the current post.
* **Grid, list, or masonry** — pick a layout mode; columns and gap are
  responsive per breakpoint.
* **Performance** — query + AJAX response caching via a namespaced transient
  generation, no_found_rows for load-more/infinite, bulk cache priming, and
  debounced requests. Built for 10,000+ posts and 100+ filter values.
* **Security** — nonce verification, capability checks, full input
  sanitisation, output escaping, and server-side (untrusted-client) settings
  resolution so query arguments can never be tampered with.

== Installation ==

1. Upload the `savvy-posts-grid` folder to `/wp-content/plugins/`.
2. Activate the plugin through the 'Plugins' menu in WordPress.
3. Edit any page with Elementor and search for **Savvy Posts Grid**.
4. (Optional) Build a card template under Templates → Saved Templates and
   select it in the widget's "Card Template" section.

== Frequently Asked Questions ==

= Does it require Elementor Pro? =
No. Elementor (free) is enough. Elementor Pro templates and its dynamic tags are fully supported if present.

= Does it require ACF? =
No. ACF fields are auto-detected and added to the filter builder when ACF is active; everything else works without it.

== Credits ==

Every bundled asset is original work by the plugin author, licensed GPLv2 or
later along with the rest of the plugin. No third-party images are included.

The fallback thumbnail shown for posts with no featured image is
`assets/img/placeholder.svg`. Point it somewhere else with:

`add_filter( 'spgrid/placeholder_image', fn() => get_stylesheet_directory_uri() . '/img/fallback.jpg' );`

Return an empty string from that filter to hide the image slot entirely on
posts that have no featured image.

== Screenshots ==

== Changelog ==

= 1.0.0 =

* Initial release.
