L'importazione di allegati da un'installazione di WordPress a un'altra può sembrare un compito arduo, ma grazie alle REST API di WordPress, questo processo può essere automatizzato e reso più efficiente. In questo articolo, vedremo passo dopo passo su come eseguire questa operazione.
Prima di tutto, è necessario ottenere una chiave API per l'installazione di WordPress sorgente per autenticarsi durante le chiamate API.
- Accedi alla tua dashboard di WordPress.
- Vai su Utenti > Il tuo profilo.
- Scorri verso il basso fino a trovare la sezione delle Applicazioni.
- Crea una nuova applicazione e annota la chiave API generata.
Possiamo quindi scrivere:
$per_page = 100; // Numero di elementi per pagina, regolabile in base alle esigenze
$page = 1;
$all_attachments = [];
$source_url = 'https://example.com/wp-json/wp/v2/media';
$api_key = 'YOUR_API_KEY';
$total_pages = 1; // Inizialmente impostato a 1 per entrare nel ciclo
do {
$response = wp_remote_get($source_url . '?per_page=' . $per_page . '&page=' . $page, [
'headers' => [
'Authorization' => 'Bearer ' . $api_key,
],
]);
if (is_wp_error($response)) {
break; // Interrompe il ciclo se si verifica un errore
}
$headers = wp_remote_retrieve_headers($response);
$body = wp_remote_retrieve_body($response);
$attachments = json_decode($body, true);
if (empty($attachments)) {
break; // Interrompe il ciclo se non ci sono più allegati
}
$all_attachments = array_merge($all_attachments, $attachments);
// Aggiorna il numero totale di pagine
if (isset($headers['x-wp-totalpages'])) {
$total_pages = intval($headers['x-wp-totalpages']);
}
$page++;
} while ($page <= $total_pages); // Continua fino a quando non abbiamo recuperato tutte le pagine
// Importa gli allegati nel sito di destinazione
foreach ($all_attachments as $attachment) {
$attachment_url = $attachment['source_url'];
if (!function_exists( 'download_url')) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
$file = download_url($attachment_url);
$filename = basename($attachment_url);
$upload = wp_upload_bits($filename, null, $file);
if (!$upload['error']) {
$wp_filetype = wp_check_filetype($filename, null);
$attachment_post = [
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit',
];
$attach_id = wp_insert_attachment($attachment_post, $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);
}
wp_delete_file($file);
}
Spiegazione del codice:
Configurazione Iniziale:
per_page
è impostato a 100 per recuperare 100 allegati per ogni chiamata API.page
è inizializzato a 1 per iniziare dalla prima pagina.all_attachments
è un array vuoto che memorizzerà tutti gli allegati recuperati.total_pages
è inizialmente impostato a 1 per entrare nel ciclo.
Richiesta Paginata:
- Viene eseguita una richiesta API utilizzando
wp_remote_get
con l'header di autenticazioneBearer
. - Le intestazioni della risposta sono recuperate utilizzando
wp_remote_retrieve_headers
. - Il corpo della risposta viene decodificato da JSON a un array associativo PHP.
- Viene eseguita una richiesta API utilizzando
Controllo e Memorizzazione degli Allegati:
- Se la risposta non contiene allegati (
empty($attachments)
), il ciclo si interrompe. - Gli allegati ottenuti dalla risposta corrente vengono aggiunti a
all_attachments
utilizzandoarray_merge
.
- Se la risposta non contiene allegati (
Aggiornamento delle Pagine Totali:
- L'header
X-WP-TotalPages
viene letto dalle intestazioni della risposta e convertito in un intero. - Il ciclo continua fino a quando tutte le pagine non sono state recuperate (
$page <= $total_pages
).
- L'header
Importazione degli Allegati:
- Iteriamo su tutti gli allegati ottenuti e scarichiamo il file usando
download_url
. - Carichiamo il file nel sistema di WordPress del sito di destinazione usando
wp_upload_bits
. - Inseriamo l'allegato nel database di WordPress e generiamo i metadati necessari.
- Iteriamo su tutti gli allegati ottenuti e scarichiamo il file usando
Conclusione
Importare gli allegati da un'installazione di WordPress a un'altra può essere semplificato utilizzando le REST API di WordPress. Questo metodo non solo risparmia tempo ma garantisce anche che tutti i dati vengano trasferiti in modo sicuro e accurato. Con un po' di codice e alcuni strumenti, puoi automatizzare questo processo e concentrarti su altre attività importanti.
Ricorda di eseguire sempre un backup completo dei tuoi siti prima di eseguire qualsiasi operazione di importazione o esportazione per evitare la perdita di dati.