Как синхронизировать перемещаемые поля ACF между сайтами WordPress

Перемещаемые (repeater) поля в плагине Advanced Custom Fields (ACF) — мощный инструмент для создания сложных структур данных в WordPress. Однако при наличии нескольких сайтов возникает задача синхронизации таких полей между ними, чтобы контент и структура оставались идентичными. В этой статье рассмотрим, как настроить синхронизацию repeater-полей ACF между сайтами на практике, используя PHP-код и рекомендации по плагинам.

Почему стандартная синхронизация ACF не подходит для repeater-полей

ACF хранит данные repeater-полей в виде множества метаполей с префиксами и индексами, что усложняет их перенос в базе данных. Стандартный экспорт/импорт JSON файлов ACF-контента затрагивает только настройки полей, но не данные конкретных записей. Для синхронизации именно данных repeater-полей нужно использовать программные методы.

Кроме того, при переносе записей через стандартные средства экспорта WordPress repeater-поля часто теряют структуру или данные оказываются неполными. Поэтому нужна кастомная реализация, которая корректно переберёт все вложенные элементы и сохранит их на целевом сайте.

Решение этой проблемы особенно актуально для сайтов с динамическим контентом, где repeater-поля используются для описания сложных блоков, например, расписаний, галерей, списков продуктов и т.п.

Обзор подходов к синхронизации repeater-полей между сайтами

Существует несколько способов синхронизировать repeater-поля ACF между сайтами WordPress:

  • Экспорт и импорт данных через REST API. Использование WP REST API для передачи JSON с данными repeater-полей. Позволяет построить автоматическую синхронизацию, но требует написания кода для правильной сериализации и десериализации.
  • Синхронизация через XML/RSS. Можно экспортировать записи со всеми метаданными и импортировать их на другой сайт, но обработка сложных repeater-полей усложнена.
  • Использование плагинов для миграции и синхронизации. Например, плагин WP All Import/Export с аддонами для ACF. Однако часто они платные и не дают полного контроля.
  • Собственные скрипты с WP-CLI. Для опытных разработчиков — можно написать скрипты импорта/экспорта repeater-полей через командную строку.

В этой статье мы подробно рассмотрим вариант с использованием REST API и PHP-кода, позволяющий гибко настроить передачу и применение данных repeater-полей.

Как подготовить данные repeater-поля для передачи через REST API

Основная задача — получить из записи все значения repeater-поля в удобном формате. Для этого удобно использовать функцию get_field ACF, которая возвращает массив с вложенными данными.

Пример получения данных repeater-поля с ключом wpsync_repeater_field:

function wpsync_get_repeater_data($post_id) {
    $data = get_field('wpsync_repeater_field', $post_id);
    return $data ?: [];
}

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

Создание REST API endpoint для приёма repeater-полей

Пример регистрации эндпоинта в функциях темы или плагина:

add_action('rest_api_init', function () {
    register_rest_route('wpsync/v1', '/update_repeater', [
        'methods' => 'POST',
        'callback' => 'wpsync_handle_repeater_update',
        'permission_callback' => function () {
            return current_user_can('edit_posts');
        },
    ]);
});

function wpsync_handle_repeater_update(WP_REST_Request $request) {
    $post_id = $request->get_param('post_id');
    $repeater_data = $request->get_param('repeater_data');
    if (!$post_id || !is_array($repeater_data)) {
        return new WP_Error('invalid_data', 'Post ID or repeater data missing', ['status' => 400]);
    }
    // Обновляем поле
    update_field('wpsync_repeater_field', $repeater_data, $post_id);
    return ['success' => true];
}

Такой эндпоинт позволяет принимать обновлённые данные repeater-поля и сохранять их в указанной записи.

Пример кода отправки данных repeater-поля с исходного сайта

Используем стандартную PHP-функцию wp_remote_post для отправки JSON на целевой сайт:

function wpsync_send_repeater_data($post_id, $target_url, $auth_token) {
    $data = wpsync_get_repeater_data($post_id);
    $response = wp_remote_post($target_url, [
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer ' . $auth_token,
        ],
        'body' => json_encode([
            'post_id' => $post_id,
            'repeater_data' => $data,
        ]),
    ]);
    if (is_wp_error($response)) {
        error_log('WPSync error: ' . $response->get_error_message());
        return false;
    }
    return true;
}

Не забудьте настроить аутентификацию (например, JWT или OAuth) между сайтами для безопасности.

Автоматизация и расширение функционала синхронизации

Для удобства можно повесить вызов функции отправки данных на хуки обновления записи:

add_action('acf/save_post', function ($post_id) {
    // Проверяем, что это нужный тип записи
    if (get_post_type($post_id) !== 'post') return;
    // Отправляем данные repeater-поля на другой сайт
    wpsync_send_repeater_data($post_id, 'https://targetsite.ru/wp-json/wpsync/v1/update_repeater', 'ВАШ_ТОКЕН');
}, 20);

Также можно внедрить обратную синхронизацию, логирование ошибок, повторные попытки и управление версиями данных.

Использование плагинов для упрощения задачи

Для ускорения можно рассмотреть плагин Clearfy Pro, который помогает оптимизировать работу с метаданными и может облегчить ручную синхронизацию. Также полезен плагин WPRemark для расширенного управления пользовательскими данными.

Выводы и рекомендации

Синхронизация repeater-полей ACF требует аккуратного подхода, так как это сложная структура данных. Использование REST API с кастомными endpoint'ами — гибкий и масштабируемый способ, позволяющий настроить обмен данными между сайтами без потерь.

Важно тщательно тестировать процесс, особенно при наличии вложенных repeater-полей и сложных типов данных. Рекомендуется также использовать средства логирования и мониторинга, чтобы вовремя обнаруживать и исправлять ошибки.

Если нужна более простая интеграция, рассмотрите специализированные плагины с поддержкой ACF или WP-CLI скрипты для пакетной обработки данных.

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

Синхронизация и отслеживание изменений в постах WordPress с помощью hooks и webhook
13.01.2026
Как синхронизировать данные в WordPress при помощи WP-CLI
05.02.2026
Как синхронизировать виджеты WordPress между сайтами
09.01.2026
Как удалить заблокированные аккаунты WordPress: практическое руководство
10.04.2026
Эффективная синхронизация WP-Cron задач между сайтами WordPress
31.03.2026