AdvancedCustomFields / AdvancedCustomFields/acf

Must click "Update" twice to save values to post_meta

Open
#996 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
PHP
Stars
945
Forks
197
PR merge metrics
No merged PRs in 30d

Description

UPDATE 2:

Properly triggering a change event on the input also solves the issue. DO NOT trigger an event on a jQuery selector of the input (like I tried a million ways).

let field = acf.getField('field_123456');

// trigger change event on $input()
field.$input().trigger('change');

UPDATE:

Works fine if I set a value attribute on the input element. Plain javascript because jQuery's prop() and attr() didn't seem to work.

let field = acf.getField('field_123456');
field.val('some value');

// add value attribute to input
document.querySelector('.acf-field[data-key="field_123456"] .acf-input-wrap input').setAttribute('value', 'some_value');

I'd still love to understand the original issue. Maybe some sort of "dirty" status that's not set when using ACF val() but is set when editing the field manually?


Describe the bug

Wondering if anyone has any insight on a custom ACF block issue? ("blockVersion": 3, "usePostMeta": "true"): values set in block with javascript are not saved to Db unless Update is clicked twice.

Within wp-admin, editing a post:

  1. I set a field value via javascript while a block is being edited:
let field = acf.getField('field_123456');
field.val('some value');
  1. I see the value in the text input on-screen
  2. I click "Update" for the post, but value is not written to dB. ***
  3. I click "Update" a second time, and value IS written to the database.

*** If I manually place the cursor in any field in the block and add/delete a character, THEN values are saved the first time I click "Update"

Sure seems like ACF triggers some event/condition when there's a manual edit, but NOT when the value is changed via the ACF JS API.

What is that event/condition? I've had no luck figuring it out...

To Reproduce
See above

Expected behavior
When I click Update the first time to save the post, the values set via the ACF JS API are saved to the db.

Version Information:

  • WordPress Version [6.9.1]
  • PHP Version [e.g 8.5]
  • ACF Version [e.g ACF PRO 6.7.0.2]
  • Browser [all of them...]

Additional context
I've submitted a ticket, and searched the forum but did not find this issue.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the block update flow with acf.getField(), field.val(), and field.$input().trigger('change') in the issue’s example. Inspect how the ACF JavaScript API handles value changes and confirm that the first Update persists the value to post_meta without a manual edit.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, php
Domain
backend, web-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.