WordPress plugin v9.1.20 Patch October 3, 2026 JetEngine listings take element writes again
- fix
JetEngine listings take element writes again. update_element and batch_update on a JetEngine listing died with "array_map(): Argument #2 must be of type array, string given" before anything was written, and left an unapproved duplicate behind. JetEngine answers get_post_meta for its listing posts with a plain string where WordPress returns a list. The meta read now accepts both, and the write receipt can no longer be the reason a write fails. Reported by G. on two sites.
- fix
Elementor append works with Elementor's own format. mode append merged the page's existing (already simplified) elements with the new native ones, then decided how to read the whole list from the first node, which is always an existing one. The new section was never converted and the untyped-widget tripwire refused it. Each node is now read on its own; the tripwire still refuses a genuinely untyped widget, and its message names the first offending element's path, id and type. Reported by M.R.
- fix
Custom CSS on block pages is stored and renders. update_page, update_post and update_custom_post silently dropped custom_css on Gutenberg, Kadence, Spectra, GenerateBlocks and GreenShift pages while reporting success. It now goes to _respira_page_css, printed after the fidelity stylesheet, re-pointed to the duplicate's id for the preview and back to the original's on approval; the snapshot and write receipt cover it. A builder with nowhere to keep page CSS refuses with respira_custom_css_unsupported before any duplicate is made. Reported by J.G.
- fix
Divi Theme Builder page templates keep the global areas. A page-specific header or footer made through Respira went into a new template with its other areas empty, and Divi shows the theme's own header or footer in an empty area; a second layout for the same page went into a second template that lost the tie. New templates now carry the global layouts, a second layout for the same conditions goes into the existing template, updates clear the caches Divi's own save clears and list which templates render the layout, and list_theme_builder_templates warns about a dropped global area or a shared condition. Reported by C.P.
- fix
Divi 5 global modules use Divi's shape. save_divi_library_item now wraps the item in divi/placeholder, and the page reference carries blockName and localAttrs, as Divi's Save to Library does. A global text module no longer blanks every other text module on the page, a global code module renders, and apply_divi_library_item places the reference inside the page's wrapper. Unparsable block attributes are refused on save as they already were on update_custom_post.
- fix
A date set on a page duplicate survives approval. update_page wrote the explicit-date marker on a variable it never defines.
- change
An ability refused by its own plugin says why. WordPress's ability_invalid_permissions arrived as a bare 500. Respira now runs the plugin's permission check again with the same input and user and answers 403 with the ability, the WordPress user and roles, the plugin's own reason and the fix when it is known (WPForms create-form: wp-admin, WPForms, Tools, AI MCP, Enable MCP Write Access). search_abilities shows the same answer as permission_check. Reported by S.G.