elementor / elementor/elementor
Post Terms dynamic tag cannot be saved on V4 atomic widgets - "Settings validation failed. paragraph: invalid_value"
- 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
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