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.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.

Torna su