Skip to content

Neve Options (page meta sidebar) silently fail to persist on some sites #4574

Description

@milicavs

Summary

On a small number of sites, the per-page Neve Options (Disable Title, Disable Header/Footer, Container, Content Width, Title Alignment, i.e. the neve_meta_* post meta saved from the editor sidebar) silently fail to persist. The editor shows "Page Updated" with no error, but the values revert when the editor is reloaded and never apply on the frontend. Core fields on the same save (content, title, featured image, tagline) persist correctly.

This has been reported at least 5 times over the past year through wp.org and HelpScout. Each report was handled in isolation, could not be reproduced on clean test sites, and was closed unresolved. Filing this so the pattern is tracked in one place and new reports get attached here.

Symptom signature (consistent across all reports)

  • Toggle a Neve Option in the editor sidebar, click Update, get the success notice
  • Reload the editor: the option has reverted; frontend never changes
  • No JS console errors, no failed requests reported by users
  • Variant reported twice: settings save correctly ONCE, then all subsequent changes revert ("locked")
  • One reporter found that writing the same neve_meta_* values directly via the Meta Box plugin persists AND renders correctly on the frontend, so DB writes and frontend reads are healthy; the failure is specific to the editor save path
  • One reporter also saw global Customizer title alignment "not applying"; this may be masking by stored per-page neve_meta_title_alignment values overriding the global setting (which the user then cannot clear because of this bug)

Reports

Date Channel Product Environment
2025-08-07 HelpScout 3029298356 Neve Pro 3.1.2 WP 6.8.2, PHP 8.2, DreamHost (nginx + Rocket-Nginx + Autoptimize), Neve child theme, Otter + Otter Pro 3.1.0
2026-03-19 wp.org thread Neve free unknown; "saves once then locks" variant
2026-07-30 wp.org thread Neve free 4.2.10 WP 7.0.2→7.0.3, PHP 8.3, MariaDB 11.8, Hostinger (LiteSpeed), Otter 3.2.1, Starter Sites 1.4.3, no child theme, no drop-ins
2026-08-09 HelpScout 3413032736 Neve Pro Hostinger (LiteSpeed + Cloudflare + FlyingPress), Otter; user says issue is longstanding; "locked" variant
2026-08-10 HelpScout 3413659384 Neve Pro Kinsta + Cloudflare, Otter 3.2.1, Starter Sites; Meta Box direct-write workaround confirmed working

Ruled out

  • Release regression: reports span a full year (WP 6.8.2→7.0.3, Neve Pro 3.1.2→3.2.x). Diffs of Neve 4.2.9/4.2.10, Neve Pro 3.2.7–3.2.9, Otter 3.2.0/3.2.1, Starter Sites 1.4.2/1.4.3 contain no changes to the metabox/meta save path
  • Hosting/caching: 4 different hosts and 4 different caching stacks across reports
  • On the 2026-07-30 wp.org case specifically (user was very cooperative): Cloudflare paused (no change), host page cache cleared, hPanel object cache off, no object-cache.php drop-in, no drop-ins at all, browser extensions ruled out via incognito, plugin conflict ruled out via Health Check Troubleshooting Mode, theme files ruled out via delete + reinstall of Neve, WP reinstalled itself as part of 7.0.2→7.0.3 auto-update with no change
  • Starter Sites: not installed on the 2025 case
  • Child theme: only present on 1 of 4 verifiable sites

Common factor on all 4 verifiable sites besides Neve: Otter (which loads editor JS), with the caveat that Otter is present on most Neve sites anyway.

Not reproducible so far

Attempted on two Hostinger sites (one long-standing, one fresh): WP 7.0.3 + latest Neve + Neve Pro + Otter 3.2.1 + Starter Sites 1.4.3 incl. a starter site import, LiteSpeed Cache with "Cache REST API" and "Cache Logged-in Users" both ON. Neve Options and Customizer settings save and apply correctly in all combinations.

Mechanism hypothesis

neve_meta_* keys are registered on init in inc/admin/metabox/manager.php (neve_register_meta()), with show_in_rest => true and the control list passing through the neve_sidebar_meta_controls filter. If registration is absent or incomplete at REST request time, WordPress silently drops those fields from the editor save payload and omits them from context=edit responses. That failure mode produces exactly this signature: success notice, silent revert, no errors, direct DB writes still working, frontend (plain get_post_meta) still rendering directly-written values.

What could make registration fail only on certain sites (custom code on the filter, mu-plugin interference, stale opcache serving mixed file versions after auto-updates, or something else) is the open question. An editor-JS-side failure (meta edits never entering the save payload; possible interaction with other editor plugins such as Otter) is the alternative; the diagnostics below distinguish the two.

Diagnostics for the next affected site we get access to

  1. Logged in as admin, open /wp-json/wp/v2/pages/<ID>?context=edit and check whether neve_meta_* keys exist in the meta object. Absent = server-side registration broken. Present = editor JS side
  2. Capture the save request (POST to wp-json/wp/v2/pages/<ID>): does the payload include the neve_meta_* fields, and does the response echo them back?
  3. Flush opcache / restart PHP (PHP version toggle on Hostinger, Restart PHP on Kinsta), retest
  4. Customizer check: does a control retain its value after publish + reopen, and does the global title alignment apply on a brand-new page (per-page meta override masking test)
  5. Ask when the issue started and whether it followed an update

Site access has been requested from the two active Pro customers; will update here with findings.

Metadata

Metadata

Labels

customer reportIndicates the request came from a customer.

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions