{"id":324456,"date":"2026-08-07T19:18:13","date_gmt":"2026-08-07T19:18:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gridnest-posts-grid-for-elementor\/"},"modified":"2026-08-07T21:01:08","modified_gmt":"2026-08-07T21:01:08","slug":"savvy-posts-grid","status":"publish","type":"plugin","link":"https:\/\/uz.wordpress.org\/plugins\/savvy-posts-grid\/","author":23500376,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.3","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Savvy Posts Grid","header_author":"Savvy Programmers","header_description":"A high-performance posts grid widget for the Elementor page builder \u2014 displays posts in a responsive grid with AJAX search, AJAX pagination, off-canvas dynamic filters (native + ACF), and Elementor template card rendering.","assets_banners_color":"182f49","last_updated":"2026-08-07 21:01:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/savvy-posts-grid.savvyprogrammers.com\/","header_author_uri":"https:\/\/profiles.wordpress.org\/savvyprogrammers\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"savvyprogrammers","date":"2026-08-07 21:01:08"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3638242,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3638242,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3638242,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3638242,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2211,5861,76538,900,130749],"plugin_category":[59],"plugin_contributors":[274824],"plugin_business_model":[],"class_list":["post-324456","plugin","type-plugin","status-publish","hentry","plugin_tags-acf","plugin_tags-ajax-filter","plugin_tags-elementor","plugin_tags-pagination","plugin_tags-posts-grid","plugin_category-utilities-and-tools","plugin_contributors-savvyprogrammers","plugin_committers-savvyprogrammers"],"banners":{"banner":"https:\/\/ps.w.org\/savvy-posts-grid\/assets\/banner-772x250.png?rev=3638242","banner_2x":"https:\/\/ps.w.org\/savvy-posts-grid\/assets\/banner-1544x500.png?rev=3638242","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/savvy-posts-grid\/assets\/icon-128x128.png?rev=3638242","icon_2x":"https:\/\/ps.w.org\/savvy-posts-grid\/assets\/icon-256x256.png?rev=3638242","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Savvy Posts Grid is a developer-grade posts grid widget for the Elementor page builder,\nbuilt for large sites. It renders posts\/pages\/CPTs in a responsive grid and layers on:<\/p>\n\n<ul>\n<li><strong>AJAX search<\/strong> \u2014 live, 300ms-debounced, preserves active filters.<\/li>\n<li><strong>AJAX pagination<\/strong> \u2014 numbered, load-more, or infinite scroll.<\/li>\n<li><strong>Off-canvas filters<\/strong> \u2014 slide-in panel (left\/right), mobile friendly.<\/li>\n<li><strong>Dynamic filter builder<\/strong> \u2014 native fields (categories, tags, author, date,\npost type) and auto-detected ACF fields (select, checkbox, radio, taxonomy,\ntrue\/false, number, text, relationship, post object), each as a dropdown,\ncheckbox list, radio buttons, button group, or toggle switch, with AND\/OR\nlogic and combined tax_query \/ meta_query generation.<\/li>\n<li><strong>Elementor template cards<\/strong> \u2014 render each post through a saved Elementor (or\nElementor Pro) template; dynamic tags resolve against the current post.<\/li>\n<li><strong>Grid, list, or masonry<\/strong> \u2014 pick a layout mode; columns and gap are\nresponsive per breakpoint.<\/li>\n<li><strong>Performance<\/strong> \u2014 query + AJAX response caching via a namespaced transient\ngeneration, no_found_rows for load-more\/infinite, bulk cache priming, and\ndebounced requests. Built for 10,000+ posts and 100+ filter values.<\/li>\n<li><strong>Security<\/strong> \u2014 nonce verification, capability checks, full input\nsanitisation, output escaping, and server-side (untrusted-client) settings\nresolution so query arguments can never be tampered with.<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>Every bundled asset is original work by the plugin author, licensed GPLv2 or\nlater along with the rest of the plugin. No third-party images are included.<\/p>\n\n<p>The fallback thumbnail shown for posts with no featured image is\n    assets\/img\/placeholder.svg. Point it somewhere else with:<\/p>\n\n<pre><code>add_filter( 'spgrid\/placeholder_image', fn() =&gt; get_stylesheet_directory_uri() . '\/img\/fallback.jpg' );\n<\/code><\/pre>\n\n<p>Return an empty string from that filter to hide the image slot entirely on\nposts that have no featured image.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>savvy-posts-grid<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Edit any page with Elementor and search for <strong>Savvy Posts Grid<\/strong>.<\/li>\n<li>(Optional) Build a card template under Templates \u2192 Saved Templates and\nselect it in the widget's \"Card Template\" section.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20require%20elementor%20pro%3F\"><h3>Does it require Elementor Pro?<\/h3><\/dt>\n<dd><p>No. Elementor (free) is enough. Elementor Pro templates and its dynamic tags are fully supported if present.<\/p><\/dd>\n<dt id=\"does%20it%20require%20acf%3F\"><h3>Does it require ACF?<\/h3><\/dt>\n<dd><p>No. ACF fields are auto-detected and added to the filter builder when ACF is active; everything else works without it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"High-performance Elementor posts grid with AJAX search, dynamic filters, pagination, and template-based cards.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324456"}],"author":[{"embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/savvyprogrammers"}],"wp:attachment":[{"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324456"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324456"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324456"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324456"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324456"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/uz.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}