WORDPRESS
#wordpress#acf#update_value#filter#normalize#meta

ACF: фильтр acf/update_value для нормализации значения

Модификация значения поля перед сохранением через acf/update_value. Без побочных записей в БД. По документации ACF.

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

  1. Добавьте в тему (functions.php) или плагин. Замените my_field на имя поля (name). В фильтре только возвращайте новое значение, не вызывайте update_field().

Фильтр acf/update_value вызывается перед записью значения поля в БД. В нём нужно только вернуть изменённое значение; вызовы update_field() или update_post_meta() внутри фильтра приводят к рекурсии и нестабильному сохранению. Для побочной записи других полей используйте хук acf/save_post.

Нормализация строки (trim)

add_filter('acf/update_value/name=my_field', function ($value, $post_id, $field) {
    return is_string($value) ? trim($value) : $value;
}, 10, 3);
  • $value — значение, которое ACF собирается записать; возвращённое значение будет сохранено.
  • Не возвращайте null для обычного поля, если не хотите очистить его: пустая строка или скорректированное значение.

Именованный фильтр для одного типа поля

add_filter('acf/update_value/name=my_field', 'my_acf_normalize_my_field', 10, 3);

function my_acf_normalize_my_field($value, $post_id, $field) {
    if (!is_string($value)) {
        return $value;
    }
    $value = trim($value);
    return $value === '' ? $value : mb_convert_case($value, MB_CASE_TITLE, 'UTF-8');
}
  • Нормализация (trim, регистр) — допустимо; запись в другие meta или вызов update_field() — только в acf/save_post.

Подробнее: WordPress: ACF поле не сохраняется — чиним запись meta.