Автоматический импорт файлов из Яндекс.Диска в WordPress

Интеграция WordPress с облачными хранилищами — востребованная задача для автоматизации контентного наполнения и управления медиа. В этой статье мы разберём, как настроить автоматический импорт файлов из Яндекс.Диска в WordPress. Это позволит регулярно синхронизировать файлы с облака, например, изображения, документы, данные CSV для импорта задач или другие типы файлов.

Почему именно Яндекс.Диск?

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

Возможные сценарии использования:

  • Импорт новых изображений в медиатеку для постов и страниц;
  • Загрузка CSV или JSON файлов для обработки и автоматического создания задач с помощью WPTasks или других плагинов;
  • Обновление данных для каталогов, прайс-листов и т.п.

Подготовка: регистрация приложения и получение ключей API Яндекс.Диска

Для работы с API Яндекс.Диска нужно зарегистрировать приложение и получить OAuth-токен. Это обеспечивает безопасный доступ к учетной записи и файлам.

  1. Перейдите на страницу регистрации приложений Яндекса.
  2. Создайте новое приложение с правами доступа к Яндекс.Диску (scope: "disk.read").
  3. Получите OAuth-токен, следуя инструкции Яндекса (можно использовать ручной способ генерации через OAuth-авторизацию).
  4. Сохраните токен — он понадобится в WordPress для доступа к API.

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

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

Основные шаги реализации

  • Авторизация по OAuth-токену.
  • Получение списка файлов через API (endpoint: https://cloud-api.yandex.net/v1/disk/resources/children?path=путь_к_папке).
  • Проверка наличия файла в медиатеке WordPress по имени.
  • Скачивание и сохранение новых файлов в медиатеку.
  • Запуск импорта по расписанию через WP-Cron.

Пример кода плагина wptasks-yadisk-import.php

<?php
/**
 * Plugin Name: WPTasks Яндекс.Диск Импорт
 * Description: Автоматический импорт файлов из Яндекс.Диска в медиатеку WordPress.
 * Version: 1.0
 * Author: WPTasks
 */

if (!defined('ABSPATH')) exit; // Защита от прямого доступа

class WPTasks_Yadisk_Import {
    private $token = 'ВАШ_OAUTH_ТОКЕН'; // Вставьте сюда свой токен
    private $folder_path = '/import'; // Папка на Яндекс.Диске для импорта

    public function __construct() {
        add_action('wptasks_yadisk_import_cron', [&$this, 'do_import']);

        if (!wp_next_scheduled('wptasks_yadisk_import_cron')) {
            wp_schedule_event(time(), 'hourly', 'wptasks_yadisk_import_cron');
        }
    }

    public function do_import() {
        $files = $this->get_files_list();
        if (!$files) return;

        foreach ($files as $file) {
            if ($this->file_exists_in_media($file['name'])) continue;

            $this->download_and_attach($file['file']);
        }
    }

    private function get_files_list() {
        $url = 'https://cloud-api.yandex.net/v1/disk/resources/children?path=' . urlencode($this->folder_path);
        $args = [
            'headers' => [
                'Authorization' => 'OAuth ' . $this->token
            ]
        ];

        $response = wp_remote_get($url, $args);
        if (is_wp_error($response)) return false;

        $data = json_decode(wp_remote_retrieve_body($response), true);
        if (empty($data['items'])) return false;

        $files = [];
        foreach ($data['items'] as $item) {
            if ($item['type'] === 'file') {
                $files[] = [
                    'name' => $item['name'],
                    'file' => $item['file'] ?? ''
                ];
            }
        }

        return $files;
    }

    private function file_exists_in_media($filename) {
        $args = [
            'post_type' => 'attachment',
            'meta_query' => [
                [
                    'key' => '_wp_attached_file',
                    'value' => $filename,
                    'compare' => 'LIKE'
                ]
            ],
            'posts_per_page' => 1
        ];
        $query = new WP_Query($args);
        return $query->have_posts();
    }

    private function download_and_attach($file_url) {
        if (empty($file_url)) return false;

        $tmp = download_url($file_url);
        if (is_wp_error($tmp)) return false;

        $file_array = [];
        $file_array['name'] = basename($file_url);
        $file_array['tmp_name'] = $tmp;

        $id = media_handle_sideload($file_array, 0);

        if (is_wp_error($id)) {
            @unlink($tmp);
            return false;
        }

        return $id;
    }
}

new WPTasks_Yadisk_Import();

Настройка расписания и запуск импорта

Плагин автоматически создаёт задачу WP-Cron, которая запускается каждый час и проверяет новые файлы в указанной папке Яндекс.Диска. При необходимости вы можете изменить интервал или запустить импорт вручную, вызвав действие do_action('wptasks_yadisk_import_cron');.

Изменение частоты запуска

Чтобы добавить кастомный интервал, например каждые 30 минут, можно использовать фильтр WP-Cron:

add_filter('cron_schedules', function($schedules) {
    $schedules['every_thirty_minutes'] = [
        'interval' => 1800, // 30 минут в секундах
        'display' => __('Каждые 30 минут')
    ];
    return $schedules;
});

// Инициализация расписания с новым интервалом
if (!wp_next_scheduled('wptasks_yadisk_import_cron')) {
    wp_schedule_event(time(), 'every_thirty_minutes', 'wptasks_yadisk_import_cron');
}

Интеграция с WPTasks и обработка импортированных данных

Если вы используете плагин WPTasks для управления задачами, можно автоматически создавать задачи из импортированных CSV-файлов. Для этого после скачивания и добавления файла в медиатеку добавьте обработчик, который распарсит файл и создаст задачи.

Пример обработки CSV

function wptasks_process_imported_csv($attachment_id) {
    $file_path = get_attached_file($attachment_id);
    if (!file_exists($file_path)) return;

    if (($handle = fopen($file_path, 'r')) !== false) {
        while (($data = fgetcsv($handle, 1000, ',')) !== false) {
            // Предполагаем, что первая колонка - название задачи, вторая - описание
            $title = sanitize_text_field($data[0]);
            $description = sanitize_textarea_field($data[1]);

            // Создаём задачу через WPTasks API
            if (function_exists('wptasks_create_task')) {
                wptasks_create_task([
                    'title' => $title,
                    'description' => $description
                ]);
            }
        }
        fclose($handle);
    }
}

// Хук после добавления вложения
add_action('add_attachment', function($post_ID) {
    $mime = get_post_mime_type($post_ID);
    if ($mime === 'text/csv') {
        wptasks_process_imported_csv($post_ID);
    }
});

Заключение по теме автоматического импорта

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

Для более удобного управления задачами и импортом рекомендуем ознакомиться с плагином WPTasks на сайте WPShop.

Как использовать WPRemark для автоматизации оценок и комментариев в WordPress
17.12.2025
Как использовать хуки WordPress для автоматизации задач
11.04.2026
Как автоматизировать управление проектами в WordPress с помощью WPTasks
14.02.2026
Как создать динамический список задач в WordPress с помощью REST API
27.03.2026
Правила кэширования в WordPress для разработчиков
05.12.2025