WORDPRESS
#wordpress#acf#save_post#autosave#revision#update_field#meta

ACF: логика на acf/save_post с проверкой autosave и revision

Перенос сохранения полей с save_post на acf/save_post с пропуском автосохранения и ревизий. update_field после сейва ACF. По документации ACF и WordPress.

Как использовать

  1. Поместите код в mu-plugin или плагин. Замените source_field и my_field на имена ваших ACF-полей.
  2. Приоритет 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.