elementor / elementor/elementor

Post Terms dynamic tag cannot be saved on V4 atomic widgets - "Settings validation failed. paragraph: invalid_value"

Open
#36,816 1 comment 0 reactions 0 assignees View on GitHub
product/editor-v4 status/awaiting_triage
Dominant language
PHP
Stars
7.1k
Forks
1.6k
Avg merge
1d 5h
Merged PRs (30d)
193

Description

### Description

Applying the **Post Terms** dynamic tag to a V4 atomic widget (`e-paragraph`, `e-heading`) inside a Component blocks saving with: `Settings validation failed. paragraph: invalid_value`

The tag is selectable and fully configurable in the editor - I can pick Post Terms and set Taxonomy to "Categories", but the save request rejects it every time. Other dynamic tags on the same widget (Post Title, Post Date, Post Excerpt) save without issue.

**Root cause - the editor and the save request build the atomic dynamic-tag registry in different post contexts.**

On editor load a real post is in context for the loop preview, so the select has options and the tag registers. The save request has no post in context, so `get_post_type()` returns `false` and no taxonomy matches.

Elementor core then treats the empty select as fatal:

1. `modules/atomic-widgets/dynamic-tags/dynamic-tags-editor-config.php` → `convert_select_control_to_atomic()` throws `'Select control must have options'`.
2. The `catch` in `convert_dynamic_tag_to_atomic()` returns `null` - which **silently drops the entire `post-terms` tag** from the atomic registry.
3. `dynamic-tags/dynamic-prop-type.php` → `validate_value()` calls `registry->get_tag('post-terms')`, gets `null`, returns `false`.
4. `parsers/props-parser.php` records `invalid_value`; `elements/base/has-atomic-base.php` throws the message above.

I've patched it on my own site using the following snippet:

```
add_filter( 'elementor_pro/dynamic_tags/post_terms/taxonomy_args', function( $args ) {
unset( $args['object_type'] );
return $args;
} );
```

### Steps to reproduce

Clean WordPress install, only Elementor + Elementor Pro + Hello Elementor active, Editor V4 enabled.

1. Ensure at least one published Post exists with a Category assigned.
2. Go to **Templates → Components** (or Theme Builder → Loop Item) and create a new Component.
3. Add an atomic **Paragraph** widget.
4. Click the **dynamic tag** icon on the Paragraph text field and choose **Post Terms**.
5. Set **Taxonomy** to **Categories**.
6. Click **Save / Publish**.
7. The save is rejected with `Settings validation failed. paragraph: invalid_value`.

### Expected behavior

A dynamic tag that the editor offers in the picker should be accepted by the save-time validator. The atomic dynamic-tag registry should resolve identically in the editor and in the save request, rather than depending on which post happens to be global at the time.

### Elementor System Info

```txt
== Server Environment ==
Operating System: Linux
Software: nginx/1.31.3
MySQL version: mariadb.org binary distribution v11.4.7-MariaDB-ubu2404
PHP Version: 8.4.21
PHP Memory Limit: 512M
PHP Max Input Vars: 10000
PHP Max Post Size: 128M
GD Installed: Yes
ZIP Installed: Yes
Write Permissions: All right
Elementor Library: Connected

== WordPress Environment ==
Version: 7.0.3
Site URL: (redacted)
Home URL: (redacted)
WP Multisite: No
Max Upload Size: 128 MB
Memory limit: 512M
Max Memory limit: 512M
Permalink Structure: /%postname%/
Language: en_AU
Timezone: (redacted)
Admin Email: (redacted)
Debug Mode: Inactive

== Theme ==
Name: Hello Elementor
Version: 3.4.9
Author: Elementor Team
Child Theme: No

== User ==
Role: administrator
WP Profile lang: en-AU
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36

== Active Plugins ==
Advanced Custom Fields PRO
Version: 6.8.7
Author: WP Engine

Easy WP SMTP
Version: 2.15.0
Author: Easy WP SMTP

Elementor
Version: 4.2.1
Author: Elementor.com

Elementor Pro
Version: 4.2.1
Author: Elementor.com

EWWW Image Optimizer
Version: 8.7.5
Author: Exactly WWW

ManageWP - Worker
Version: 4.9.35
Author: GoDaddy

Novamira
Version: 1.11.2
Author: Dynamic.ooo

Novamira Pro
Version: 1.8.2
Author: Dynamic.ooo

Rank Math SEO
Version: 1.0.275
Author: Rank Math SEO

Rank Math SEO PRO
Version: 3.0.118
Author: Rank Math SEO

Silvercode Code Snippets
Version: 1.0.0
Author: Silvercode

Silvercode Customisations V3
Version: 1.0.15
Author: Silvercode

Silvercode Elementor Widgets
Version: 1.5.0
Author: Silvercode

Silvercode Lucide Icons for Elementor
Version: 1.4.0
Author: Silvercode

Silvercode Plugin Updater
Version: 1.0.1
Author: Silvercode

Wordfence Security
Version: 8.2.2
Author: Wordfence

WP Activity Log (Premium)
Version: 5.6.5
Author: Melapress

== Must-Use Plugins ==
Disable Automatic Updates
Version: 1.0.0
Author: SilverCode

Kinsta Must-use Plugins
Version: 3.6.1
Author: Kinsta Team

ManageWP - Worker Loader
Version: 1.0.0
Author: GoDaddy

== Features ==
Custom Fonts: 2
Custom Icons: 0

== Integrations ==

recaptcha_v3: Active

== Elementor Experiments ==
Inline Font Icons: Active by default
Additional Custom Breakpoints: Active by default
Container: Active by default
Optimized Markup: Active by default
Panel Promotions: Inactive
Default to New Theme Builder: Active by default
Header & Footer: Inactive
Elementor MCP WP Abilities API: Inactive by default
Pro Free Trial Popup: Active by default
Nested Elements: Active by default
Pages Panel: Inactive by default
Atomic Widgets: Active by default
V4 Indications Popover: Inactive by default
Enforce atomic widgets capabilities: Active by default
Editor MCP for atomic widgets: Active by default
Backward compatibility migrations: Active by default
Global Classes: Active by default
Enforce global classes capabilities: Active by default
Variables: Active by default
Variables Manager: Active by default
Editor v4 (Opt In Page): Active by default
Editor V4: Active by default
Components: Active by default
Interactions: Active by default
Widget Creation: Active by default
Generate website markdown: Inactive by default
Dynamic Assets Management: Inactive by default
Import/Export Customization: Active by default
Site Builder: Inactive by default
Elementor Editor Events: Active by default
Atomic Form: Active by default
Loop: Active by default
Menu: Active by default
Size Variables: Active by default
Pro Interactions: Active by default
In-Editor Feedback: Inactive by default

== Log ==

Log: showing 17 of 172026-07-21 16:32:40 [info] Elementor/Upgrades - _on_each_version Start
2026-07-21 16:32:40 [info] Elementor/Upgrades - _on_each_version Finished
2026-07-21 16:32:40 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor',
'from' => '4.1.5',
'to' => '4.2.0',
)]
2026-07-21 16:32:47 [info] elementor-pro::elementor_pro_updater Started
2026-07-21 16:32:47 [info] Elementor Pro/Upgrades - _on_each_version Start
2026-07-21 16:32:47 [info] Elementor Pro/Upgrades - _on_each_version Finished
2026-07-21 16:32:47 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor Pro',
'from' => '4.1.3',
'to' => '4.2.0',
)]
2026-07-29 18:42:22 [info] Elementor data updater process has been queued. [array (
'plugin' => 'Elementor',
'from' => '4.2.0',
'to' => '4.2.1',
)]
2026-07-29 18:42:22 [info] Elementor data updater process has been queued. [array (
'plugin' => 'Elementor Pro',
'from' => '4.2.0',
'to' => '4.2.1',
)]
2026-07-29 18:42:29 [info] elementor::elementor_updater Started
2026-07-29 18:42:29 [info] Elementor/Upgrades - _on_each_version Start
2026-07-29 18:42:29 [info] Elementor/Upgrades - _on_each_version Finished
2026-07-29 18:42:29 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor',
'from' => '4.2.0',
'to' => '4.2.1',
)]
2026-07-29 18:42:29 [info] elementor-pro::elementor_pro_updater Started
2026-07-29 18:42:29 [info] Elementor Pro/Upgrades - _on_each_version Start
2026-07-29 18:42:29 [info] Elementor Pro/Upgrades - _on_each_version Finished
2026-07-29 18:42:29 [info] Elementor data updater process has been completed. [array (
'plugin' => 'Elementor Pro',
'from' => '4.2.0',
'to' => '4.2.1',
)]

PHP: showing 9 of 9PHP: 2026-07-21 21:55:52 [notice X 69][/www/(redacted)_605/public/wp-content/plugins/elementor/modules/global-classes/atomic-global-styles.php::410] Elementor\Modules\GlobalClasses\Atomic_Global_Styles::get_cache_root_key(): Implicitly marking parameter $key as nullable is deprecated, the explicit nullable type must be used instead [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-21 23:23:37 [warning X 62][/www/(redacted)_605/public/wp-content/plugins/elementor/modules/interactions/interactions-frontend-handler.php::61] foreach() argument must be of type array|object, null given [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-28 00:05:54 [warning X 12][/www/(redacted)_605/public/wp-content/plugins/elementor-pro/core/app/modules/site-editor/data/endpoints/templates.php::150] Undefined array key "condition_type" [array (
'trace' => '
#0: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/core/app/modules/site-editor/data/endpoints/templates.php(150): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: ElementorPro\Core\App\Modules\SiteEditor\Data\Endpoints\Templates -> normalize_template_json_item()
#2: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/core/app/modules/site-editor/data/endpoints/templates.php(120): class type array_map()
#3: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/core/app/modules/site-editor/data/endpoints/templates.php(59): ElementorPro\Core\App\Modules\SiteEditor\Data\Endpoints\Templates -> normalize_templates_json()
#4: /www/(redacted)_605/public/wp-content/plugins/elementor/data/base/endpoint.php(156): ElementorPro\Core\App\Modules\SiteEditor\Data\Endpoints\Templates -> get_items()
',
)]
PHP: 2026-07-28 00:06:15 [notice X 40][/www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/screenshots/module.php::33] Function utf8_decode() is deprecated since 8.2, visit the php.net documentation for various alternatives [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-29 21:18:00 [notice X 4][/www/(redacted)_605/public/wp-content/plugins/elementor-lucide-icons/plugin-update-checker/Puc/v5p1/StateStore.php::80] YahnisElsts\PluginUpdateChecker\v5p1\StateStore::setUpdate(): Implicitly marking parameter $update as nullable is deprecated, the explicit nullable type must be used instead [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-29 21:19:50 [notice X 5][/www/(redacted)_605/public/wp-content/plugins/elementor-lucide-icons/plugin-update-checker/vendor/ParsedownModern.php::789] Parsedown::blockTable(): Implicitly marking parameter $Block as nullable is deprecated, the explicit nullable type must be used instead [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-29 22:12:12 [warning X 20][/www/(redacted)_605/public/wp-content/plugins/elementor/modules/history/revisions-manager.php::363] Undefined array key "editor_post_id" [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]
PHP: 2026-07-30 19:07:21 [warning X 8][/www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/loop-filter/query/taxonomy-manager.php::150] Undefined array key "logicalJoin" [array (
'trace' => '
#0: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/loop-filter/query/taxonomy-manager.php(150): Elementor\Core\Logger\Manager -> rest_error_handler()
#1: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/loop-filter/query/taxonomy-query-builder.php(33): ElementorPro\Modules\LoopFilter\Query\Taxonomy_Manager -> get_hierarchy_of_selected_terms()
#2: /www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/loop-filter/module.php(123): ElementorPro\Modules\LoopFilter\Query\Taxonomy_Query_Builder -> get_merged_queries()
#3: /www/(redacted)_605/public/wp-includes/class-wp-hook.php(341): ElementorPro\Modules\LoopFilter\Module -> filter_loop_query()
#4: /www/(redacted)_605/public/wp-includes/plugin.php(205): WP_Hook -> apply_filters()
',
)]
PHP: 2026-07-31 00:26:39 [warning X 6][/www/(redacted)_605/public/wp-content/plugins/elementor-pro/modules/dynamic-tags/acf/tags/acf-text.php::32] Undefined array key 1 [array (
'trace' => '
#0: Elementor\Core\Logger\Manager -> shutdown()
',
)]

JS: showing 16 of 16JS: 2026-07-27 03:15:37 [error X 3][(redacted)/wp-admin/load-scripts.php?c=1&loadchunk_0=jquery-ui-draggable,react,react-dom&ver=7.0.2:104:23] Class with this name already exists.
JS: 2026-07-29 08:01:20 [error X 13][(redacted)/wp-content/plugins/elementor/assets/js/admin.min.js?ver=4.2.0:2:42363] r.startsWith is not a function
JS: 2026-07-29 08:56:10 [error X 89][(redacted)/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.2.1:2:933742] Failed to execute 'querySelector' on 'Document': '#' is not a valid selector.
JS: 2026-07-29 11:40:58 [error X 186][(redacted)/wp-content/plugins/elementor-pro/assets/js/editor.min.js?ver=4.2.1:2:8353] Cannot read properties of undefined (reading 'find')
JS: 2026-07-29 16:13:54 [error X 22][(redacted)/wp-content/plugins/elementor/assets/js/editor-modules.min.js?ver=4.2.1:2:14080] Cannot read properties of null (reading 'editor')
JS: 2026-07-30 08:46:12 [error X 2][(redacted)/wp-content/plugins/elementor/assets/js/editor-modules.min.js?ver=4.2.1:2:21541] An invalid argument supplied as multiple control value [array (
'category' => 'InvalidElementData',
'tag' => 'Element `loop-grid` got as `typography_line_height` value. Expected array or object.',
)]
JS: 2026-07-30 08:48:16 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/editor-modules.min.js?ver=4.2.1:2:21541] An invalid argument supplied as multiple control value [array (
'category' => 'InvalidElementData',
'tag' => 'Element `taxonomy-filter` got as `taxonomy_filter_typography_line_height` value. Expected array or object.',
)]
JS: 2026-07-30 14:08:56 [error X 2][(redacted)/wp-content/plugins/elementor/assets/js/frontend-modules.min.js?ver=4.2.1:1:48943] Cannot read properties of undefined (reading 'params')
JS: 2026-07-30 15:08:36 [error X 2][(redacted)/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.2.1:2:1022368] Cannot read properties of undefined (reading 'toLowerCase')
JS: 2026-07-30 15:10:16 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/editor-modules.min.js?ver=4.2.1:2:21541] An invalid argument supplied as multiple control value [array (
'category' => 'InvalidElementData',
'tag' => 'Element `icon-list` got as `icon_typography_line_height` value. Expected array or object.',
)]
JS: 2026-08-02 06:46:02 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/web-cli.min.js?ver=4.2.1:2:95069] Data commands: `` not found.
JS: 2026-08-04 03:41:29 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/editor-modules.min.js?ver=4.2.1:2:21541] An invalid argument supplied as multiple control value [array (
'category' => 'InvalidElementData',
'tag' => 'Element `loop-carousel` got as `typography_fraction_line_height` value. Expected array or object.',
)]
JS: 2026-08-04 06:53:46 [error X 2][(redacted)/wp-content/plugins/elementor/assets/js/packages/editor-documents/editor-documents.min.js?ver=4.2.1:1:3810] Cannot read properties of null (reading 'config')
JS: 2026-08-05 05:37:23 [error X 2][(redacted)/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.2.1:2:249647] this.ui.input.val is not a function
JS: 2026-08-05 06:12:19 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/editor.min.js?ver=4.2.1:2:1262949] Cannot read properties of undefined (reading 'getBoundingClientRect')
JS: 2026-08-05 06:23:35 [error X 1][(redacted)/wp-content/plugins/elementor/assets/js/common-modules.min.js?ver=4.2.1:1:34614] Model.isValidChild() should be implemented, please provide 'isValidChild' functionality.

== Elementor - Compatibility Tag ==

Elementor Pro: Compatibility not specified
Silvercode Elementor Widgets: Compatibility not specified
Silvercode Lucide Icons for Elementor: Compatibility not specified

== Elementor Pro - Compatibility Tag ==
```

### Agreement

- [x] I confirm I have read and followed all the guidelines and instructions outlined in the Editor V4 Bug Report form.
- [x] I agree that my issue may be closed without further action if it doesn't meet all the requirements outlined in the Editor V4 Bug Report form.

Contributor guide

Open the contributing guide

Research direction

Start by tracing the Post Terms registry through modules/atomic-widgets/dynamic-tags/dynamic-tags-editor-config.php and dynamic-tags/dynamic-prop-type.php, then follow validation in parsers/props-parser.php and elements/base/has-atomic-base.php. Reproduce the V4 Component save failure with Post Terms selected for Categories, and confirm that the editor and save request resolve the tag consistently and the save succeeds.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, wordpress
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.