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.