Интеграция WordPress с облачными хранилищами — востребованная задача для автоматизации контентного наполнения и управления медиа. В этой статье мы разберём, как настроить автоматический импорт файлов из Яндекс.Диска в WordPress. Это позволит регулярно синхронизировать файлы с облака, например, изображения, документы, данные CSV для импорта задач или другие типы файлов.
Почему именно Яндекс.Диск?
Яндекс.Диск — популярное облачное хранилище с удобным API, позволяющим программно получать доступ к файлам. Автоматизация загрузки из Яндекс.Диска полезна, если контент регулярно обновляется на стороне облака, и нужно быстро интегрировать его в сайт WordPress без ручного вмешательства.
Возможные сценарии использования:
- Импорт новых изображений в медиатеку для постов и страниц;
- Загрузка CSV или JSON файлов для обработки и автоматического создания задач с помощью WPTasks или других плагинов;
- Обновление данных для каталогов, прайс-листов и т.п.
Подготовка: регистрация приложения и получение ключей API Яндекс.Диска
Для работы с API Яндекс.Диска нужно зарегистрировать приложение и получить OAuth-токен. Это обеспечивает безопасный доступ к учетной записи и файлам.
- Перейдите на страницу регистрации приложений Яндекса.
- Создайте новое приложение с правами доступа к Яндекс.Диску (scope: "disk.read").
- Получите OAuth-токен, следуя инструкции Яндекса (можно использовать ручной способ генерации через OAuth-авторизацию).
- Сохраните токен — он понадобится в 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.