Come importare immagini da AWS S3 nella Media Library di WordPress

Come importare immagini da AWS S3 nella Media Library di WordPress

Importare immagini da una directory su AWS S3 nella libreria media di WordPress può essere utile per migrare contenuti o sincronizzare asset. In questo articolo vediamo come creare uno script PHP per svolgere questa operazione.

Prerequisiti

  • Accesso al pannello di amministrazione WordPress
  • Permessi per caricare file nel server WordPress
  • Chiavi AWS IAM con accesso alla bucket S3
  • Plugin WP Offload Media opzionale ma consigliato

Installazione delle dipendenze AWS SDK

Installiamo il pacchetto AWS SDK per PHP, necessario per interfacciarsi con S3:

composer require aws/aws-sdk-php

Creazione dello script PHP

Inseriamo il seguente script nel file functions.php del tema oppure in un plugin personalizzato:


require 'vendor/autoload.php';

use Aws\S3\S3Client;

function my_import_images_from_s3() {
  $s3 = new S3Client([
    'region'  => 'us-east-1',
    'version' => 'latest',
    'credentials' => [
      'key'    => 'TUO_AWS_KEY',
      'secret' => 'TUO_AWS_SECRET',
    ],
  ]);

  $bucket = 'nome-del-tuo-bucket';
  $prefix = 'directory/immagini/';

  $objects = $s3->getPaginator('ListObjectsV2', [
    'Bucket' => $bucket,
    'Prefix' => $prefix,
  ]);

  foreach ($objects as $result) {
    foreach ($result['Contents'] as $object) {
      $key = $object['Key'];
      $filename = basename($key);

      $temp_file = download_temp_file($s3, $bucket, $key);
      if ($temp_file) {
        $filetype = wp_check_filetype($filename, null);
        $upload = wp_upload_bits($filename, null, file_get_contents($temp_file));

        if (!$upload['error']) {
          $attachment = [
            'post_mime_type' => $filetype['type'],
            'post_title'     => sanitize_file_name($filename),
            'post_status'    => 'inherit'
          ];

          $attach_id = wp_insert_attachment($attachment, $upload['file']);
          require_once ABSPATH . 'wp-admin/includes/image.php';
          $attach_data = wp_generate_attachment_metadata($attach_id, $upload['file']);
          wp_update_attachment_metadata($attach_id, $attach_data);
        }
      }
    }
  }
}

function my_download_temp_file($s3, $bucket, $key) {
  $temp_file = wp_tempnam($key);
  try {
    $s3->getObject([
      'Bucket' => $bucket,
      'Key'    => $key,
      'SaveAs' => $temp_file
    ]);
    return $temp_file;
  } catch (Exception $e) {
    error_log($e->getMessage());
    return false;
  }
}

Esecuzione della funzione

Puoi eseguire import_images_from_s3() manualmente da un hook admin, da WP-CLI oppure da una route REST personalizzata.

Sicurezza

  • Evita di lasciare le chiavi AWS nel codice. Usa variabili d'ambiente o il file wp-config.php.
  • Limita l'accesso alla funzione agli utenti amministratori.
  • Non eseguire l'import in automatico senza controlli di sicurezza.

Conclusione

Con pochi passaggi è possibile importare immagini da AWS S3 nella Media Library di WordPress. Questo approccio è utile per progetti headless, migrazioni, o flussi di lavoro automatizzati.