Written by

in

Version 2.1 is live. It pushes the plugin past “professional block library” and into the territory you used to need a full page builder for: dynamic content loops, field bindings, conditional visibility, and a fully standardized editor experience across every block. Here’s what’s new and why it matters.

The Dynamic Query block family

The headline feature in 2.1 is a brand-new Dynamic Query block — a query loop you can point at any content on your site and style exactly how you want.

  • Six sources out of the box: Posts, Users, Terms, a Manual selection, the Current archive, and a new Relationship source that iterates the posts referenced by a relationship field (meta or ACF).
  • Real filters: a tax_query / meta_query builder with multi-level AND/OR groups, per-clause “Include children” on taxonomies, a Date Query builder with before / after / between filters (and relative expressions like -30 days), plus search, author, and offset.
  • Editor live preview: the Dynamic Query renders real posts, users, or terms right in the editor. The first item’s template is editable; items 2..N render from the server so what you see is exactly what ships.
  • Template picker onboarding: insert a Dynamic Query and pick from Minimal, Blog Index, Team, Portfolio, Testimonials, Related Posts, or Events presets — instead of hunting through the block inserter for variations.
  • Sibling blocks: Query Pagination (numbered, load-more, or infinite-scroll), Query Filter (checkbox, select, search, sort, active, reset), Query No Results, and the new Query Group Header.

Group-by partitioning and nested loops

Turn a flat list into a grouped list with one attribute. Group-by partitioning splits items by taxonomy, meta, or date (year, year-month, or year-month-day) and renders the new Query Group Header block once per group — perfect for grouped archives, date-grouped blogs, or category-driven landing pages.

Need a query inside a query? 2.1 introduces nested loops with parent context. The outer query’s current item flows into any inner Dynamic Query, and bindings in the inner loop can read the outer item’s data through a new scope option (self, parent, or root). Think: a list of clients, each showing their three most recent case studies.

Per-option filter counts and infinite scroll

Dynamic Query filters now show live result counts next to every option — “Blog (42)”, “News (17)” — and those counts stay accurate as visitors apply other filters. Counts come from a persistent filter index that updates automatically when content changes, so rendering them costs sub-millisecond query time even on large sites.

Pagination gets an infinite scroll variation that’s easy on the browser: it uses IntersectionObserver, auto-pauses after three auto-loads (to avoid runaway scroll hijacks), and respects prefers-reduced-motion.

Query-bound Slider and Scroll Slides

The Slider and Scroll Slides blocks can now host a Dynamic Query — iterate posts, users, or terms and render each one as a slide. Same editing experience, same frontend behaviour, no custom code.

Dynamic Tags — bind anything to live data

If you’ve used Elementor’s dynamic tags, this will feel familiar. A new Dynamic Tags picker lives on the block toolbar and lets you bind text, titles, URLs, and images to live data sources — post meta, ACF, Meta Box, Pods, JetEngine, or any custom source — with a live preview of the resolved value while you edit.

Under the hood it’s built on the WordPress 6.9 Block Bindings API. DesignSetGo blocks now participate in that API natively, so Advanced Heading Segment content, Breadcrumbs home/prefix text, and Query Pagination labels (among others) are bindable out of the box. The picker works on any core block that opts into Block Bindings too.

Field sources for Meta Box, Pods, and JetEngine

Three new binding sources — designsetgo/metabox, designsetgo/pods, and designsetgo/jetengine — delegate to each plugin’s own formatting API (rwmb_meta(), pods_field(), jet_engine()->listings->data->get_meta()) so formatted dates, file URLs, and relationships render exactly how the field plugin expects. Each source only registers when its host plugin is active, so there’s no overhead if you don’t use them.

Conditional block visibility

Every block now has an Advanced → Visibility panel. Show or hide a block based on:

  • post meta values
  • taxonomy terms
  • the current item’s index in a query loop (first item, last item, every third, etc.)
  • whether the visitor is logged in

Combine rules with AND/OR and operators like equals, contains, greater-than, less-than, empty. Editor previews mirror what ships on the frontend, so you’re never guessing.

Per-URL Markdown for AI and developer tools

Any published page or post URL now returns Markdown when the client sends Accept: text/markdown. This is the acceptmarkdown.com readiness contract — the same standard AI assistants and developer tools are starting to use to fetch content in a clean format.

It reuses the Markdown files generated for llms.txt, respects your post-type allowlist, per-page exclusions, and password-protected posts — so there’s no extra setup. Your site stays a regular HTML site for browsers and becomes a clean Markdown source for tools that want one.

2.1 also fixes a long-standing reliability issue: llms.txt generation now writes correctly on managed hosts like WP Engine, Kinsta, and Pantheon. Those environments don’t always define the FTP constants WordPress historically relied on, which previously caused silent write failures. File writes now route through the WordPress filesystem API with a safe fallback for environments where it isn’t available.

A rebuilt editor experience

Behind the new features, 2.1 also ships a full editor-UX overhaul across the entire block library:

  • Unified first-insert onboarding on compound blocks (Accordion, Flip Card, Image Accordion, Scroll Accordion, Slider) so you always start from a sensible preset instead of a blank canvas.
  • Flip Card consolidation: front and back child blocks merged into one Flip Card Face block with a “side” attribute — cleaner markup and easier duplication.
  • Standardized inspector: every block’s sidebar uses the same Settings → Style → Advanced three-panel layout, with per-control reset-to-default. No more hunting for where a particular control lives.
  • Discoverability polish: block icons, category registration, and naming cleaned up across ~30 blocks.
  • Grid: a new column count toolbar (1–6 columns, with a dropdown above 6) and a new row span control for grid children.
  • Tabs and Slider get shared tablist keyboard navigation and an Add / Duplicate / Move / Remove toolbar for child blocks.
  • Advanced Heading: segment appender is back on the canvas so you can add more heading segments without opening the inspector.
  • Image Accordion: “Default Expanded Item” is now a named picker showing each item’s heading (was a 0–10 numeric slider).
  • Dynamic Image: refreshed inspector with a sticky footer, live editor preview, and Select-based controls for every finite-option setting.
  • Form Builder: the confirmation message now persists across page reloads, so submitters still see the thank-you after a refresh.
  • Sticky header reliability fix: a typo in the Settings → DesignSetGo custom selector field used to throw an exception that took down all frontend JavaScript on the page. Invalid selectors now silently fall back to the default header detection, so a stray character can’t break your site.

New: Hover Effects extension

A new universal extension for animated hover interactions. Like every DesignSetGo extension, it works on any block — including core blocks and third-party blocks.

Security hardening

  • Form submissions: redirect URLs are now normalized and validated against a safe-protocol allowlist before navigation.
  • Draft Mode REST: all Draft Mode REST routes now require nonce verification on their permission callbacks.
  • Dynamic CSS style bindings: dangerous values (url(, expression(, javascript:) are rejected and a property allowlist prevents bindings from leaking behavioral styles.
  • Global Styles sanitization: stored Global Styles values are now validated against a CSS-value allowlist (numeric units, var() / calc() / clamp() / min() / max(), hex / rgb / hsl colors, named keywords, font-family lists). Every functional form rejects url(, expression(, javascript:, <, and ; regardless of the wrapping function.
  • Sticky header custom selector: the Settings input now rejects HTML angle brackets, javascript:, expression(, url(, and @import patterns before the value ever reaches the frontend.

Removed: Visual Revision Comparison

WordPress 7.0 ships a native visual diff for revisions, so the custom Visual Revision Comparison feature has been removed in 2.1. This also removes the associated admin page, block differ, REST endpoints, and settings — your revision history is untouched and you get a better experience from core.

For developers

2.1 ships a number of new extension points for plugin and theme developers:

  • designsetgo_register_bindings_source() — public helper to register custom binding sources with DSGo’s post-password, viewable, protected-meta, and scope gates built in.
  • designsetgo_resolve_bindings_post_id() — scope-aware post-ID resolution for callers that use the core binding registration API directly.
  • designsetgo_visibility_rule filter — add custom visibility rule types.
  • designsetgo_query_args and designsetgo/query/{queryId}/args — pre-WP_Query filter hooks (global or per-query).
  • designsetgo_query_partition_items() — public helper for custom group-by integrations.
  • designsetgo_block_bindings_supported_attributes filter — extend native Block Bindings coverage to additional block attributes.
  • New REST routes: /designsetgo/v1/query/template (GET + POST), /preview, /filter-register, /filter-status, /filter-rebuild, /filters, /render.
  • A Query Monitor panel that surfaces per-render query args, found-posts count, duration, and SQL for every Dynamic Query on the page.
  • WP-CLI commands: wp dsgo query index rebuild, rebuild-filter, status, drop.

Upgrading

2.1 requires WordPress 6.7 or newer and PHP 8.0 or newer. All new blocks and bindings are additive — existing content keeps rendering exactly as before. The only removal is the Visual Revision Comparison admin page (superseded by WordPress 7.0’s native visual diff).

Update from your Plugins screen, or download the latest ZIP from your account. If you run into anything unexpected, the full changelog lives in the plugin’s readme.txt, and you can reach us via the support forum or GitHub.

Comments

Leave a Reply