Trasferire un sito su WordPress

Potrebbe capitarvi di dover trasferire un blog o sito vecchio, con tutti i suoi post, commenti, categorie, pagine e tag all’interno di uno nuovo sito in WordPress.

In alcuni casi la situazione sarà complessa ed i metodi descritti qui non funzioneranno (MODx, Blogger ed altri), quindi dovrete migrare “a mano” facendo estrema attenzione a conservare solo ciò che può essere effettivamente migrato, eliminando il superfluo e convertendo i determinate tabelle seguendo la struttura del database di WordPress.

Nella più semplice delle ipotesi, i metodi sono due: importare il vecchio database MySQL in quello nuovo (solo se ospitate il sito per conto vostro), oppure importare il file XML che potete comodamente creare dal pannello WordPress oppure altre piattaforme blog compatibili con WordPress (possibile sia su sito ospitato su WordPress.com che ospitato sul vostro server).

DB: PHPMyAdmin

Il primo metodo richiede l’accesso a phpmyadmin del vostro host, cosa che non è sempre possibile e dipende dal provider che state utilizzando (un provider serio l’accesso lo dà sempre) e garantisce una copia clone del vostro database, integralmente (quindi non solo articoli e commenti, ma anche tabelle di plugin, opzioni ecc).

[box color=green]Per non doversi preoccupare di problemi WordPress legati al server, consiglio Mediatemple.
Per gli utenti che vogliono avere tutto pronto e subito (installazione WP automatica), consiglio il piano WordPress Personal, mentre per chi preferisce gestirsi da solo l’installazione di WP, il piano GRID.
[/box]

WordPress: Import/Export

Il secondo metodo è più alla portata di un utente medio o comunque senza esperienza o accesso MySQL: esportazione ed importazione da pannello WordPress dei contenuti, tramite file XML.
Se il sito vecchio ha più di un centinaio di articoli, potreste incorrere in noiosi problemi legati al timeout dello script di importazione del file XML, che contiene tutti i contenuti del sito che state trasferendo.

Il motivo è abbastanza banale: le impostazioni di tempo massimo di esecuzione di script, del vostro server, potrebbe essere troppo basso per permettere a tutti gli elementi del file di essere correttamente letti ed eseguiti.
Potreste quindi vedere una pagina di errore, oppure semplicemente bianca, o ancora con errori del tipo “The uploaded file exceeds the upload_max_filesize directive in php.ini” e simili.

Un passo fondamentale da eseguire PRIMA ancora di procedere con l’esportazione dei file dal sito vecchio è quella di eliminare TUTTI i commenti di spam e cestino, poichè in alcuni casi il loro numero potrebbe creare entry di diversi MB, ingestibili e pesantissimi. Sarà anche utile eliminare tutte le tag assolutamente inutili (troppe volte abbiamo osservato l’uso delle tag in modi assolutamente inappropriati) e lasciarne un massimo di 5 per post, se non meno.
Infine, razionalizzare le categorie: se avete categorie che non sono linkate da nessuna parte, vuote, accorpabili ad altre, sistematele!
Una volta curata la parte pre-esportazione, sarete pronti per effettuare il passaggio, creando il file XML di esportazione dal pannello Strumenti di WordPress.

Poichè non tutti hanno la possibilità di modificare il file php.ini del proprio server (e poter controllare così tutte le variabili relative), ma quasi tutti possono lavorare sul file .htaccess (nella root pubblica della vostra cartella FTP), basterà copiare queste righe in cima a tale file (che dovrebbe già essere presente in alcuni casi, altrimenti basta crearlo):

php_value upload_max_filesize 15M
php_value post_max_size 15M
php_value memory_limit 48M
php_value max_execution_time 600
php_value max_input_time 600

La prima istruzione dice al server di aumentare il limite massimo di grandezza di un file da caricare fino a 15mb (potete inserire un valore più alto ma senza esagerare).
La seconda istruzione è simile alla prima e deve avere lo stesso valore.
La terza fa sì che il server conceda più risorse allo script che è utile per processare file di grandi dimensioni densi di contenuti.
La quarta aumenta il tempo massimo di esecuzione dello script (600 secondi = 10 minuti) in modo che non vada in timeout a metà processo lasciando a metà il lavoro e causando problemi vari.
L’ultima istruzione, che va di pari passo con quella precedente e deve avere lo stesso valore.

Media Temple Hosting

Se il vostro server permette l’override del php.ini con il file .htaccess, avete risolto tutti i vostri problemi: il tempo di esecuzione sarà sufficiente all’importazione di tutto il file XML e anche nel caso sia un file di grosse dimensioni, il procedimento andrà a buon fine.
Dopo aver eseguito l’operazione rimuovete quelle righe dal file .htaccess in quanto potrebbero dar luogo a problemi di sicurezza per il nuovo sito, inoltre i server con piani shared potrebbero darvi problemi se non rispettate i loro limiti standard continuamente.

Se state effettuando l’operazione di trasferimento da WordPress a WordPress e questa soluzione non è comunque sufficiente, potete ricorrere ad un piccolo strumento di divisione del file XML in pacchetti più piccoli da 1MB l’uno: uno splitter scaricabile da qui.
Questo caso potrebbe essere dovuto al fatto che l’hosting non permette l’override dell’.htaccess sul php.ini, o il vostro file è troppo grande perchè contenente qualche centinaia o migliaia di post.

Nel caso di errori dello splitter, scaricate ed installate in pochi minuti anche il RunTime di Visual Basic 6, da qui.
Grazie a questo splitter, potrete spacchettare il vostro file XML in pacchetti più piccoli e caricarli uno per volta.

Esiste inoltre uno splitter scritto in Python che esegue le stesse operazioni da riga di comando, basta specificare il file da splittare ed in quante parti (altrimenti 2 di default):

#!/usr/bin/python
# This script is designed to take a wordpress xml export file and split it into some
# number of chunks (2 by default). The number of lines per chunk is determined by counting
# the number of occurences of a particular line, ‘\n’ by default, and breaking up the
# such that each chunk has an equal number occurences of that line. The appropriate header
# and footer is added to each chunk.
import os
import sys
import math
# first argument specifies the wordpress .xml file to split up
if len(sys.argv) 2 else 2
line_delimiter = ‘\n’
delimiter_count = 0
for line in lines :
if line == line_delimiter :
delimiter_count += 1
print ”
print ‘File “%s” contains %s items’ % (input_file_string, delimiter_count)
delimiter_count = 1.0*delimiter_count
delimiters_per_chunk = int(math.ceil(delimiter_count/number_of_chunks))
print ‘Creating %s files with at most %s items each:’ % (number_of_chunks, delimiters_per_chunk)
header = “”
footer = “\n\n\n”
chunk_number = 1
output_file_name = “%s_%s%s” % (input_file_name, chunk_number, input_file_extension)
output_file = open(output_file_name, ‘w’)
print ‘ Writing chunk %s to file %s…’ % (chunk_number, output_file_name)
delimiter_count = 0
for line in lines :
if line == line_delimiter : delimiter_count += 1
if chunk_number is 1 and delimiter_count is 0 : header += line
if delimiter_count > delimiters_per_chunk :
output_file.write(footer)
output_file.close()
chunk_number += 1
delimiter_count = 1
output_file_name = “%s_%s%s” % (input_file_name, chunk_number, input_file_extension)
output_file = open(output_file_name, ‘w’)
print ‘ Writing chunk %s to file %s…’ % (chunk_number, output_file_name)
output_file.write(header)
output_file.write(line)
<code>output_file.close()
print ‘Done!\n’

Trasferire un sito su WordPress

Infine, se volete effettuare il trasferimento da altre piattaforme tipo TypePad, LiveJournal, BlogWare, Blogger o Movable Type, verso WordPress ed avete comunque il problema che il file esportato è troppo grande da importare, potete utilizzare lo strumento ufficiale di WordPress per spacchettarlo, da qui.

RSS

Per concludere vi segnaliamo anche un altro metodo per trasferire un sito vecchio a WordPress, meno conosciuto, ma assolutamente utile in casi estremi oppure quando il sito vecchio non è proprio compatibile con WordPress: il trasferimento via RSS Feed, che consente di estrarre gli articoli da qualsiasi file RSS 2.0 e importarli nel proprio blog.
Si tratta di una funzione molto utile se si vuole importare degli articoli da un sistema che non è gestito da uno specifico strumento di importazione.