wpcoding.ru wordpress WP Coding

Как создать автоматический импорт визиток из REST API в WordPress

Автоматический импорт данных в WordPress из внешних REST API — частая задача, особенно когда нужно интегрировать каталоги, базы данных или визитки. В этой статье разберём, как создать надёжный механизм, который будет периодически импортировать визитки из REST API и создавать записи кастомного типа «Визитка».

Что такое импорт визиток из REST API и зачем он нужен

Визитки — это карточки с контактной информацией, которые можно хранить в WordPress в виде кастомных записей. Если у вас есть внешний сервис или база с такими данными, то вручную переносить их неудобно и долго. Автоматический импорт позволяет:

  • Своевременно обновлять информацию о контактах;
  • Избежать ошибок ручного ввода;
  • Автоматически создавать новые визитки и обновлять существующие;
  • Легко масштабировать обработку большого числа записей.

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

Создание кастомного типа записи «Визитка»

Первым делом создадим кастомный тип записи, чтобы хранить визитки отдельно от постов и страниц. Добавьте следующий код в файл functions.php вашей темы или в плагин:

function wpcoding_register_business_card_cpt() {
    $labels = array(
        'name' => 'Визитки',
        'singular_name' => 'Визитка',
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'has_archive' => true,
        'show_in_rest' => true,
        'supports' => array('title', 'editor', 'custom-fields'),
    );
    register_post_type('business_card', $args);
}
add_action('init', 'wpcoding_register_business_card_cpt');

Этот код создаст новый тип записи с названием «Визитка», который поддерживает редактор, заголовок и произвольные поля.

Подключение к REST API и получение данных визиток

Для примера возьмём гипотетический REST API, который возвращает JSON с визитками по адресу https://example.com/api/cards. Предположим, что каждая визитка содержит поля: id, name, phone, email и company.

Создадим функцию для получения данных из API:

function wpcoding_get_business_cards_from_api() {
    $response = wp_remote_get('https://example.com/api/cards');
    if (is_wp_error($response)) {
        return [];
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return [];
    }
    return $data;
}

Эта функция вернёт массив с визитками или пустой массив при ошибке.

Импорт данных и сохранение в WordPress

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

function wpcoding_import_business_cards() {
    $cards = wpcoding_get_business_cards_from_api();
    if (empty($cards)) {
        return;
    }
    foreach ($cards as $card) {
        // Проверяем, есть ли уже запись с таким внешним ID
        $existing = get_posts(array(
            'post_type' => 'business_card',
            'meta_key' => 'external_id',
            'meta_value' => $card['id'],
            'post_status' => 'any',
            'numberposts' => 1,
        ));
        $post_data = array(
            'post_title' => sanitize_text_field($card['name']),
            'post_type' => 'business_card',
            'post_status' => 'publish',
            'meta_input' => array(
                'external_id' => sanitize_text_field($card['id']),
                'phone' => sanitize_text_field($card['phone']),
                'email' => sanitize_email($card['email']),
                'company' => sanitize_text_field($card['company']),
            ),
        );
        if (!empty($existing)) {
            $post_data['ID'] = $existing[0]->ID;
            wp_update_post($post_data);
        } else {
            wp_insert_post($post_data);
        }
    }
}

Этот код ищет по метаполю external_id существующую запись и обновляет её, иначе создаёт новую.

Автоматизация импорта с помощью WP-Cron

Чтобы импорт происходил автоматически, зарегистрируем WP-Cron задачу, которая будет запускать импорт, например, каждый час.

function wpcoding_schedule_import() {
    if (!wp_next_scheduled('wpcoding_hourly_import')) {
        wp_schedule_event(time(), 'hourly', 'wpcoding_hourly_import');
    }
}
add_action('wp', 'wpcoding_schedule_import');

add_action('wpcoding_hourly_import', 'wpcoding_import_business_cards');

Этот код планирует событие, которое будет вызывать функцию импорта ежечасно.

Отладка и расширение функционала

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

Также можно добавить в административную панель кнопку для ручного запуска импорта. Для этого используйте add_submenu_page и Ajax-запросы.

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

Пример использования плагина Clearfy Pro для оптимизации импорта

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

Помимо этого, Clearfy Pro может помочь с безопасностью и ускорением загрузки, что важно при регулярных запросах к внешним API.

Итог

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

Используйте описанные методы и пример кода как основу для своего решения, адаптируя под специфику используемого API и требования проекта.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙