wpinc.ru wordpress WP Inc

Как создать автоматический импорт локальных файлов в WordPress

Автоматизация импорта контента в WordPress — задача, которая часто возникает у разработчиков и владельцев сайтов. Если вы храните большой объем локальных файлов (например, изображения, документы, CSV или JSON), и хотите регулярно загружать их в библиотеку медиа или использовать как источник данных для записей, то ручной импорт становится неудобным и трудозатратным.

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

Почему стоит автоматизировать импорт локальных файлов в WordPress

Если вы регулярно обновляете сайт с помощью локального контента, например, выгружаете с другого ресурса или обрабатываете данные в локальной системе, автоматизация сэкономит массу времени. Особенно актуально для новостных сайтов, каталогов, магазинов и порталов с медиафайлами.

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

Типичные сценарии использования

  • Импорт изображений и документов из локальной папки на сервере в медиа-библиотеку WordPress.
  • Автоматическое создание записей с прикреплёнными файлами, например, новостей с изображениями.
  • Синхронизация данных из локальных CSV/JSON файлов с пользовательскими типами записей.

Готовые плагины для автоматического импорта локальных файлов

Перед тем как писать код, стоит рассмотреть готовые решения, которые можно настроить под свои задачи.

1. WP All Import

Один из самых мощных и гибких плагинов для импорта данных из CSV/XML. Позволяет создавать сложные правила импорта, сопоставлять поля и автоматически загружать файлы. Поддерживает импорт локальных файлов, если указать правильный путь.

Преимущество — удобный интерфейс и поддержка множества форматов. Недостаток — платная версия для расширенных функций.

2. Media Sync

Простой бесплатный плагин, который позволяет импортировать файлы из локальных папок, находящихся на сервере, в медиа-библиотеку WordPress. Хорошо подходит для одноразового или периодического импорта.

3. FileBird + собственный код

FileBird помогает организовать медиафайлы в каталоги, а с помощью собственного кода можно автоматически запускать импорт из нужной папки. Это гибкое решение, если нужно интегрировать импорт в собственную бизнес-логику.

Создание собственного плагина для автоматического импорта локальных файлов

Для максимальной гибкости предлагаем написать простой плагин, который будет сканировать указанную папку на сервере, загружать файлы в медиа-библиотеку и создавать записи с прикреплёнными файлами.

Структура плагина

Плагин будет содержать функцию wpinc_import_local_files, которая:

  • Получает список файлов из заданной директории.
  • Проверяет, не были ли эти файлы уже импортированы.
  • Импортирует новые файлы в медиа-библиотеку.
  • При необходимости создаёт записи, прикрепляя к ним файлы.

Пример кода

<?php
/**
 * Plugin Name: WPINC Автоимпорт локальных файлов
 * Description: Автоматический импорт локальных файлов в медиа-библиотеку WordPress
 * Version: 1.0
 * Author: WPINC
 */

// Основная функция импорта
function wpinc_import_local_files() {
    $import_dir = WP_CONTENT_DIR . '/uploads/import_files'; // Папка с файлами для импорта

    if (! is_dir($import_dir)) {
        error_log('WPINC Import: папка для импорта не найдена.');
        return;
    }

    $files = scandir($import_dir);
    if (!$files) {
        error_log('WPINC Import: невозможно прочитать папку.');
        return;
    }

    require_once(ABSPATH . 'wp-admin/includes/file.php');
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach ($files as $file) {
        if ($file === '.' || $file === '..') continue;

        $file_path = $import_dir . '/' . $file;

        // Проверяем, что это файл
        if (! is_file($file_path)) continue;

        // Проверяем, не импортирован ли файл уже
        $attachment_id = wpinc_find_attachment_by_file($file_path);
        if ($attachment_id) {
            continue; // файл уже импортирован
        }

        // Импортируем файл
        $upload_file = wp_upload_bits($file, null, file_get_contents($file_path));

        if ($upload_file['error']) {
            error_log('WPINC Import: ошибка загрузки файла ' . $file . ': ' . $upload_file['error']);
            continue;
        }

        $wp_filetype = wp_check_filetype($upload_file['file'], null);

        $attachment = array(
            'post_mime_type' => $wp_filetype['type'],
            'post_title'     => sanitize_file_name($file),
            'post_content'   => '',
            'post_status'    => 'inherit'
        );

        $attach_id = wp_insert_attachment($attachment, $upload_file['file']);
        if (! is_wp_error($attach_id)) {
            $attach_data = wp_generate_attachment_metadata($attach_id, $upload_file['file']);
            wp_update_attachment_metadata($attach_id, $attach_data);
            // Здесь можно создавать запись и прикреплять файл, если нужно
        }
    }
}

// Вспомогательная функция поиска вложения по пути файла
function wpinc_find_attachment_by_file($file_path) {
    global $wpdb;
    $upload_dir = wp_upload_dir();
    $relative_path = str_replace($upload_dir['basedir'], '', $file_path);

    $attachment = $wpdb->get_var($wpdb->prepare(
        "SELECT ID FROM $wpdb->posts WHERE guid LIKE %s AND post_type = 'attachment'",
        '%' . $wpdb->esc_like($relative_path) . '%'
    ));

    return $attachment ? intval($attachment) : false;
}

// Для примера запускаем импорт при инициализации админки
add_action('admin_init', 'wpinc_import_local_files');
?>

В этом коде мы:

  • Сканируем папку wp-content/uploads/import_files на наличие файлов.
  • Проверяем, не загружен ли файл уже в медиа-библиотеку.
  • Импортируем новый файл с помощью функций WordPress и создаём вложение.
  • Добавляем логи ошибок в error_log для отладки.

Расширение функционала: создание записей с импортированными файлами

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

function wpinc_create_post_with_attachment($attach_id, $title = '') {
    $post_data = array(
        'post_title'  => $title ?: 'Импортированный пост',
        'post_status' => 'publish',
        'post_type'   => 'post'
    );
    $post_id = wp_insert_post($post_data);
    if (! is_wp_error($post_id)) {
        set_post_thumbnail($post_id, $attach_id); // Устанавливаем миниатюру
    }
    return $post_id;
}

Вызовите эту функцию в цикле импорта после создания вложения, передав ID вложения и заголовок.

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

При работе с импортом локальных файлов важно соблюдать несколько правил:

  • Проверяйте права доступа к папке импорта — не допускайте загрузки вредоносных файлов.
  • Ограничивайте размеры и типы файлов для импорта.
  • Используйте WP-Cron или внешние задачи для запуска импорта по расписанию, чтобы не нагружать сервер при каждом заходе на сайт.
  • Логируйте ошибки и результаты, чтобы отслеживать процесс.

Интеграция с продуктами WPShop

Если вы используете на своём сайте продукты WPShop, например, WPGPT для автоматизации создания контента, то автоматический импорт локальных файлов можно связать с генерацией описаний или автоматическим заполнением полей.

Также можно комбинировать с плагином Clearfy Pro для оптимизации и безопасности процесса импорта.

Выводы

Автоматический импорт локальных файлов в WordPress — мощный инструмент для оптимизации работы с контентом. Подходы могут варьироваться от использования готовых плагинов до создания собственного решения с учётом специфики проекта.

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙