ACF: логика на acf/save_post с проверкой autosave и revision
Перенос сохранения полей с save_post на acf/save_post с пропуском автосохранения и ревизий. update_field после сейва ACF. По документации ACF и WordPress.
Как использовать
- Поместите код в mu-plugin или плагин. Замените source_field и my_field на имена ваших ACF-полей.
- Приоритет 20 — выполнение после того, как ACF уже записал данные в wp_postmeta.
Чтобы не перетирать meta автосохранением и ревизиями, логику записи ACF-полей нужно вешать на acf/save_post и пропускать пост, если это wp_is_post_autosave() или wp_is_post_revision(). Дополнительные значения записывайте через update_field() уже после сейва ACF (приоритет 20).
MU-plugin: сохранение зависимого поля после ACF
<?php
/**
* Plugin Name: ACF Save Fix (MU)
*/
add_action('acf/save_post', function ($post_id) {
if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
return;
}
if (!is_admin()) {
return;
}
$value = get_field('source_field', $post_id);
if ($value === null || $value === '') {
return;
}
$computed = mb_strtoupper((string) $value);
update_field('my_field', $computed, $post_id);
}, 20);
wp_is_post_autosave/wp_is_post_revision— исключают срабатывание на черновиках и ревизиях, иначе meta может записаться «не в тот» пост или перезатереться.- Приоритет 20 — ACF к этому моменту уже сохранил
$_POST['acf']в БД; любая дополнительная запись черезupdate_field()не конфликтует с основным сейвом.
Подробнее: WordPress: ACF поле не сохраняется — чиним запись meta.