Importare immagini da Google Drive nella Media Library di WordPress
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.phpdel 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.