Синхронизация полей ACF между сайтами WordPress по условию

Advanced Custom Fields (ACF) — один из самых популярных плагинов для расширения функционала WordPress. Часто возникает задача синхронизировать значения полей ACF между разными сайтами WordPress, но не всегда нужно переносить все данные целиком. В этой статье рассмотрим, как выполнить выборочную синхронизацию полей ACF по заданным условиям, используя вебхуки, REST API и кастомный код.

Почему нужна выборочная синхронизация ACF?

Случаи, когда требуется синхронизировать только часть данных ACF, встречаются часто. Например, на одном сайте вы храните маркетинговую информацию, на другом — технические параметры. Или вы хотите синхронизировать только поля с определённым статусом публикации, пользовательской ролью или другими условиями.

Простая репликация базы или экспорт/импорт JSON не подходит, когда данные нужно фильтровать и обновлять динамически. Для таких случаев лучше использовать REST API и настраиваемые webhook-обработчики.

Настройка REST API для выборочной передачи полей ACF

Для начала убедимся, что на обоих сайтах включен REST API и установлен плагин ACF to REST API, который расширяет стандартный REST API WordPress, позволяя работать с полями ACF.

После установки плагина ACF to REST API у вас появится возможность получать и отправлять данные кастомных полей через endpoint типа /wp-json/acf/v3/posts/{id}.

Далее нужно написать функцию, которая будет отбирать и отправлять только нужные поля. Пример кода для отправки выбранных полей через REST API:

function wpsync_send_acf_fields_conditionally($post_id) {
    // Получаем все поля ACF для поста
    $fields = get_fields($post_id);

    if (!$fields) {
        return;
    }

    // Фильтруем поля по условию, например, только поля с префиксом 'sync_'
    $filtered_fields = array_filter($fields, function($key) {
        return strpos($key, 'sync_') === 0;
    }, ARRAY_FILTER_USE_KEY);

    if (empty($filtered_fields)) {
        return;
    }

    $remote_url = 'https://targetsite.ru/wp-json/acf/v3/posts/' . $post_id;
    $response = wp_remote_post($remote_url, [
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer ' . WPSYNC_API_TOKEN
        ],
        'body' => json_encode(['fields' => $filtered_fields])
    ]);

    if (is_wp_error($response)) {
        error_log('WPSYNC: Ошибка синхронизации ACF - ' . $response->get_error_message());
    }
}

add_action('acf/save_post', 'wpsync_send_acf_fields_conditionally', 20);

В этом примере при сохранении поста срабатывает функция, которая выбирает из всех полей ACF только те, что начинаются с sync_, и отправляет их на удалённый сайт через REST API с авторизацией по токену.

Обработка входящих данных на целевом сайте

На стороне принимающего сайта нужно создать endpoint REST API, который будет принимать обновлённые поля и сохранять их к соответствующему посту.

Пример регистрации собственного REST API маршрута для приёма данных:

add_action('rest_api_init', function () {
    register_rest_route('wpsync/v1', '/update-acf/(?P<id>\d+)', [
        'methods' => 'POST',
        'callback' => 'wpsync_receive_acf_fields',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        }
    ]);
});

function wpsync_receive_acf_fields($request) {
    $post_id = $request['id'];
    $fields = $request->get_param('fields');

    if (!$fields || !is_array($fields)) {
        return new WP_Error('no_fields', 'Поля не переданы или неверный формат', ['status' => 400]);
    }

    foreach ($fields as $key => $value) {
        update_field($key, $value, $post_id);
    }

    return ['success' => true];
}

Этот код создаёт REST API маршрут /wp-json/wpsync/v1/update-acf/{id}, который принимает поля и обновляет их у поста с переданным ID.

Примеры плагинов для синхронизации ACF с условием

Если хочется готовое решение, можно обратить внимание на плагины, которые поддерживают синхронизацию с фильтрами:

  • WP Sync DB — умеет экспортировать и импортировать данные базы с возможностью выбора таблиц и условий.
  • WP All Import + WP All Export — позволяют гибко настраивать экспорт/импорт полей ACF с фильтрацией по условиям.
  • ACF Sync — плагин для синхронизации полей ACF между сайтами, поддерживает JSON-экспорт и импорт.

Но для тонкой настройки по условиям лучше писать собственные скрипты, как показано выше.

Советы по безопасности и производительности

При реализации выборочной синхронизации важно учитывать безопасность — передавать данные только по защищённым каналам (HTTPS), использовать авторизацию с токеном или ключом, ограничивать права доступа на сервере.

Также не стоит синхронизировать слишком часто или сразу много записей — это может нагрузить сервер. Рекомендуется использовать WP-Cron для отложенной отправки обновлений или триггеры только на изменённые записи.

Итоги

Выборочная синхронизация полей ACF между сайтами WordPress — задача не из простых, но с помощью REST API, хуков и небольшого кода её можно реализовать гибко и эффективно. Такой подход позволит передавать только нужные данные и контролировать процесс синхронизации, избегая излишней нагрузки и ошибок.

Для удобной работы с ACF и REST API можно использовать плагин ACF to REST API, а для управления процессом — WP-Cron и собственные REST маршруты.

Как синхронизировать виджеты WordPress между сайтами
09.01.2026
Как синхронизировать задачи с помощью WP-Cron в WordPress
23.12.2025
Как синхронизировать пользовательские роли и права в WordPress между сайтами
05.12.2025
Как синхронизировать настройки темы WordPress между сайтами
26.12.2025
Автоматизация сборки и отправки отчетов WooCommerce на email
10.05.2026