This latest batch of updates brings improvements to ACF support, pagination, and the template editing experience. We’ve also made behind-the-scenes enhancements to performance, compatibility, and developer tools. Read on to find out what’s new.
The big picture
Here’s a highlight of the features we’re most excited about that have been released since version 4.1.0:
- Logic Module for Frontend and Backend Evaluation (4.1.4)
- New HTML & CSS Engines with Modular Editor Integration (4.1.4 & 4.1.0)
- List, Map, and Loop Enhancements (4.1.0)
- Smaller Plugin Build and Testing Improvements (4.1.4)
- ACF Date Field Breaking Change & Format Support (4.1.0)
Logic module for frontend and backend evaluation
The new Logic module introduces a system for defining conditional rules that run consistently across both frontend (TypeScript) and backend (PHP) environments. It adds a new set of dynamic tags such as <Logic>
, <Rule>
, <All>
, <Any>
, and <Not>
, designed to create reusable, modular logic that can be applied inside <If>
tags using the logic attribute. This means you can centralize complex logic rules once and reference them throughout your templates, making your code more readable and easier to maintain. It allows you to define reusable conditions for controlling template behavior in different contexts. It provides developers with a new way to organize and reuse conditional logic more cleanly within their templates.
New HTML & CSS engines with modular editor integration
Version 4.1.4 includes updates to the editor’s core, introducing new HTML and CSS engines along with a modular linter and formatter system. These tools are now organized separately from WordPress, making them easier to maintain and reuse in different contexts. Developers will benefit from smarter linting rules (like checking for duplicate HTML IDs only when relevant), as well as a formatter that supports document-wide or line-specific formatting via keyboard shortcuts. Behind the scenes, the editor’s codebase has been updated with newer CodeMirror modules and a fork of Prettier tailored to the L&L templating language. Whether you’re fine-tuning complex templates or just cleaning up your markup, these improvements make authoring L&L templates more intuitive.
List, map, and loop enhancements
In version 4.1.0, Loops & Logic expands its loop capabilities by adding support for advanced query parameters such as offset, count, sort, filter, and pagination to non-post loop types like List, Map, and Map Keys. This allows you to apply similar filtering and sorting options used in post loops to other structured data within your templates. For example, maps can now be sorted by key or value, and lists can be paginated just like post loops. The syntax is unified and predictable. For instance, sorting a list by value simply uses sort_field=value
. These enhancements make L&L more expressive for custom data structures, enabling developers to handle complex logic and display needs without needing to fall back on PHP or external tools.
Smaller plugin builds and testing improvements
Version 4.1.4 brings significant improvements to L&L’s build and release process, resulting in a plugin package that’s approximately 42% smaller. By stripping out source maps in production builds, the team has reduced bloat without sacrificing functionality making updates faster to install and easier to manage. Behind the scenes, the addition of a test environment with wp-now, tests for supported PHP versions, and end-to-end tests using Chromium means each release is now more thoroughly tested and production-ready.
ACF date field breaking change & format support
One of the most important changes in version 4.1.0 is a breaking update to how ACF date, time, and date/time fields are formatted in L&L templates. Previously, these fields defaulted to site-level formats or hardcoded values like “Y-m-d H:i:s”, but they now strictly follow the Return Format setting defined within each ACF field. This change aligns L&L with ACF’s intended behavior, improving consistency across templates, but it may affect existing templates that assumed the old defaults. Developers should review their templates to ensure the correct formatting is preserved, especially if custom logic depends on the date structure. While this change adds a small migration task, it ultimately leads to cleaner, more predictable template behavior going forward.
Full changelog from version 4.1.0
Those are our top five standout features from this release cycle but they’re far from the only changes worth noting. From performance enhancements and developer tooling to security fixes and compatibility updates, there’s plenty more packed into versions 4.1.0 through 4.1.9. Here’s the full changelog for a complete look at everything that’s new:
4.1.9
Release Date: 2025-01-28
- Improve compatibility with PHP 8.4
- Improve develop/build/test setup and workflow for plugin and modules
- REST API: Improve compatibility with Checkview
4.1.8
Release Date: 2025-02-26
- Improve compatibility with PHP 8.4
- Improve dev/build/test setup and release pipeline
4.1.7
Release Date: 2024-11-21
- Fix Gutenberg enqueue inside editor iframe: Register Template block dependencies
- Block Editor: Enqueueing Assets in the Editor
- Optional object cache for parsed and preprocessed template posts; See admin settings
4.1.5
Release Date: 2024-08-31
- Fix XSS vulnerability when visiting admin settings page URL
4.1.4
Release Date: 2024-06-13
- Editor and language integration
- New HTML and CSS engines, linter, formatter
- Organize general-purpose editor and template language features independent of WordPress
- Improve plugin zip package build/test/release workflow
- File size ~42% smaller
- Remove source maps for production
- Improve support for SQLite database integration
- Logic module: Build and evaluate conditional rules for frontend (TypeScript) and backend (PHP)
- Tags: Logic, Rule, All, Any, Not
- Integrate with If tag using attribute “logic”
- Pager module: Start new foundation for more modular pagination features
- Tags: Pager, PagerButtons, PagerFields, PagerLoading
- Support loop ID
- First/last, previous/next actions
- Multiple button groups and fields before/after loop
- Post loop: Get loop context in taxonomy archive to return current taxonomy and term
- Start features in progress (alpha)
- Content: Template type for content structure templates
- Views: Unified interface to edit and manage all template types (layouts, scripts, styles, assets, libraries)
- Table module
- Fix error with method enqueue_table
- Fix warning when sorting value is null instead of string
- Test environment with wp-now (https://github.com/WordPress/playground-tools/tree/trunk/packages/wp-now)
- Tests for supported PHP versions
- End-to-end tests with Chromium
- Verify plugin zip package
4.1.3
Release Date: 2024-03-22
- ACF Date/Time field: Add tests for field comparison with timestamps
- Base loop: Improve casting query parameter to array when non-string value is passed
- Beaver integration: Ensure Template module restores current post in context
- Taxonomy term loop: Handle case when include/exclude is given as integer ID
- Template save and format slugify: Use remove_accents() to convert all accent characters to ASCII characters, before creating slug with sanitize_title_with_dashes()
4.1.2
Release Date: 2024-03-15
- ACF integration
- Date field types: Ensure unformatted value is passed to date conditions
- Group, Flexible Content, Repeater: Correctly set up subfield loop after change to List loop type to support extended parameters such as offset/count/sort/filter
- Post loop: Handle case when extended query parameter for post/user/category/tag slug is not array
- Sass module: Revert to SCSS-PHP 1.11.1 to keep compatibility with PHP 7.4
- Taxonomy term loop: Correctly pass post object IDs to query
4.1.0
Release Date: 2024-03-12
- ACF integration
- Breaking change: Date field types now get their default formatting from the field setting for Return Format. Previously the defaults were from site setting (Date field), “Y-m-d H:i:s” (Date/Time), and “H:i:s” (Time). Now they use the selected format in each field’s settings, or ACF’s default return format: “d/m/Y” (Date), “d/m/Y g:i a” (Date/Time), and “g:i a” (Time).
- Improve handling of “format” and “locale” attributes
- Editor
- Formatter
- Add keyboard shortcuts to support formatting by entire document or selected lines
- Start a fork of Prettier HTML formatter to customize based on template language definition
- Linter: Improve HTML linter rule for unique ID so it applies only to static tags
- Update CodeMirror modules and Prettier
- Formatter
- HTML module
- Add comprehensive HTML test suite with test files from Parse5, Prettier, and Unified
- Refactor to improve performance: ~3% faster
- Loop types
- Consolidate everywhere that accepts a list to support comma-separated list and JSON array
- Improve sort by field using “field_compare”
- List, Map, Map Keys: Support query parameters for base loop, such as offset, count, sort, filter, pagination
- List: Use field name “value”, like “sort_field=value”
- Map keys: Use field name “key” or “value”. Keep default order of keys as defined, unless “sort_field=key” is applied – previously was sorted alphabetically.
- Gutenberg integration: Template block: Remember previously selected template when switching tabs
- Sass module: Upgrade Sass compiler (scssphp) to 1.12.1, and CodeMirror Sass language support
- Taxonomy term loop: Ensure “post” attribute accepts list variable
- Template post types: Ensure templates always have a universal ID assigned, during post save and before exporting. This improves how duplicate templates are handled during import.
- Template tag/shortcode: Ensure no post matches if attribute “name” is an empty string – See WP_Query matches any post when query parameter “name” is an empty string