WordPress: eseguire la migrazione di un sito esistente

28 maggio 2014

WordPress può essere un’operazione relativamente semplice o estremamente complessa a seconda della preparazione preliminare che si svolge sul sito di partenza e della conoscenza stessa delle funzionalità del CMS. Vediamo insieme come procedere.

Studio del sito Web di partenza

La prima domanda da porsi è: come è strutturato il sito di partenza?

  • è un sito statico (nessun database)
  • è un sito dinamico (con database)

Nel primo caso siamo vincolati al numero di pagine esistenti: se sono poche possiamo semplicemente importarne i contenuti manualmente nell’editor di WordPress, ma se il loro numero è elevato dobbiamo creare uno script che automatizzi il processo di reperimento dei dati che ci interessano, ossia:

  • titolo del post o della pagina
  • contenuto del post o della pagina
  • categoria del post o della pagina

Come fare?

  1. effettuate una scansione delle directory del sito alla ricerca dei file HTML in essa presenti seguendo il tutorial: List files and directories with PHP
  2. una volta ottenuti i file HTML, di cui consiglio di studiarne prima la struttura, si dovrà estrarne il titolo, il contenuto e la categoria. Si potrà utilizzare l’estensione DOM di PHP, stando attenti a sopprimere gli errori in caso di marcatura malformata (consultare questa pagina utilizzando libxml_use_internal_errors ).
  3. per quanto riguarda il titolo del post, si potrà usare l’elemento title, mentre per il contenuto si dovrà conoscere quale elemento lo racchiude (ad esempio <div id="content"></div>); per la categoria il discorso è più complesso: se non è specificata nel codice HTML, si potrà ricavarla dal percorso del file. Ad esempio se il percorso è sito.it/articoli/news/ la categoria sarà “news”, ossia il nome della directory.

Esempio:

function get_inner_html( $node ) { 
  $innerHTML= ''; 
  $children = $node->childNodes; 
  foreach ( $children as $child ) { 
     $innerHTML .= $child->ownerDocument->saveXML( $child ); 
  } 
  return $innerHTML; 
} 
foreach( $files as $file ) {
  $html = file_get_contents( $file );
  $dom = new DOMDocument();
  $dom->loadHTML( $file );
  $title = $dom->getElementsByTagName( 'title' )->item( 0 )->
  firstChild->nodeValue;
  $content_element = $dom->getElementById( 'content' );
  $content = get_inner_html( $content_element );
}

Se invece il sito è dinamico e possiede un database, occorre porsi le seguenti domande:

  • Quale tabella corrisponde ai post o alle pagine di WordPress?
  • Quale tabella corrisponde alle tassonomie di WordPress?
  • Quale tabella corrisponde agli utenti di WordPress?

Supponiamo di avere questa tabella "news":

id titolo sottotitolo testo data categoria
2 Test Lorem ipsum dolor… <p>Lorem ipsum… 2014-05-25 11

Ecco la correlazione:

Database di partenza WordPress
titolo post_title
sottotitolo post_excerpt
testo post_content
data post_date
categoria post_category

Per ottenere il nome della categoria:

SELECT nome FROM categorie WHERE id_categoria = 11

Il modo più semplice per risolvere il problema delle categorie resta comunque il seguente:

  1. Creare nel backend di WordPress le categorie con lo stesso nome di quelle del database di partenza.
  2. Annotare l’ID che WordPress assegna a ciascuna categoria.
  3. Creare un array come il seguente:
  4. $cat_to_ids = array(
    	array( 'titolo', 2 ),
    	array( 'titolo', 3 ),
    	array( 'titolo', 4 )
    );
  5. In questo array ciascun membro è a sua volta un array che contiene il nome della categoria del database originale e l’ID che WordPress ha assegnato alle categorie create.
  6. Sfrutteremo l’array con questa funzione:
  7. function get_wp_cat_id( $name ) {
    	global $cat_to_ids;
    	$id = 1;
    	foreach( $cat_to_ids as $cid ) {
    		$n = $cid[0];
    		if( $name == $n ) {
    			$id = $cid[1];
    		}
    	}
    	
    	return $id;
    }
    
  8. Si utilizzerà questa funzione passandole come parametro il nome delle categorie del database di partenza.

A questo punto ci si chiederà: si dovrà popolare il database di WordPress manualmente?. La risposta sarà negativa, infatti WordPress dispone di alcune utilissime funzioni che automatizzano l’intero processo.

Se vuoi aggiornamenti su WordPress: eseguire la migrazione di un sito esistente inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su WordPress: eseguire la migrazione di un sito esistente

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy