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.

Torna su