Importare automaticamente immagini da una cartella di Google Drive nella libreria media di WordPress può essere utile per automatizzare flussi di lavoro, soprattutto in ambiti editoriali o collaborativi. In questo articolo, vedremo come realizzare una procedura che sfrutta l'API di Google Drive e le funzioni interne di WordPress.
Requisiti
- Un progetto Google Cloud con API Drive attivata
- Le credenziali OAuth 2.0 (file
credentials.json
) - Accesso FTP o file system al sito WordPress
- Un plugin personalizzato o il file
functions.php
del tema
Autenticazione con Google Drive
Utilizzeremo la libreria PHP google/apiclient
. Installala tramite Composer:
composer require google/apiclient:^2.0
Salva il file credentials.json
nella root del plugin o del tema.
Codice per connettersi a Google Drive
require 'vendor/autoload.php';
function my_get_google_client() {
$client = new Google_Client();
$client->setAuthConfig(__DIR__ . '/credentials.json');
$client->addScope(Google_Service_Drive::DRIVE_READONLY);
$client->setAccessType('offline');
$client->setPrompt('select_account consent');
return $client;
}
Recuperare i file dalla cartella Drive
function my_list_drive_images($folderId) {
$client = my_get_google_client();
$service = new Google_Service_Drive($client);
$query = "'{$folderId}' in parents and mimeType contains 'image/' and trashed = false";
$files = $service->files->listFiles([
'q' => $query,
'fields' => 'files(id, name, mimeType)'
]);
return $files->getFiles();
}
Importare nella Media Library
function my_import_image_to_media_library($imageUrl, $filename) {
$tmp = download_url($imageUrl);
if (is_wp_error($tmp)) return false;
$file_array = [
'name' => $filename,
'tmp_name' => $tmp
];
$id = media_handle_sideload($file_array, 0);
if (is_wp_error($id)) {
@unlink($tmp);
return false;
}
return $id;
}
Procedura Completa
Per ogni file trovato nella cartella Drive, genera un link di download pubblico e importalo:
function my_import_drive_folder_to_media_library($folderId) {
$files = my_list_drive_images($folderId);
foreach ($files as $file) {
$fileId = $file->getId();
$name = $file->getName();
$url = "https://drive.google.com/uc?export=download&id={$fileId}";
$result = my_import_image_to_media_library($url, $name);
if ($result) {
echo "Importato: $name\n";
} else {
echo "Errore: $name\n";
}
}
}
Note Finali
Assicurati che le immagini siano pubblicamente accessibili o che l'account autenticato abbia i permessi adeguati. L'utilizzo di un plugin personalizzato è raccomandato per mantenere il codice separato dal tema.
Infine, ricordati di gestire i token di accesso/refresh nel caso l'applicazione venga usata in ambiente di produzione a lungo termine.