Quella che segue è la procedura di base per operare la migrazione da un database custom a WordPress.
Per prima cosa creiamo una classe helper per la connessione al database custom:
class Database {
const HOST = 'host';
const DBNAME = 'nome database custom';
const CHARSET = 'utf8'; // Verificarla prima
const USERNAME = 'nome utente';
const PASSWORD = 'password';
protected $_connection;
public function __construct() {
$this->_connection = new PDO('mysql:host=' . self::HOST . ';dbname=' . self::DBNAME . ';charset=' . self::CHARSET, self::USERNAME, self::PASSWORD);
}
public function fetch($query) {
$stmt = $this->_connection->query($query);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $results;
}
public function getRowCount($query) {
$stmt = $this->_connection->query($query);
$rowCount = $stmt->rowCount();
return $rowCount;
}
public function getLastInsertID($statement) {
$result = $this->_connection->exec($statement);
$insertID = $this->_connection->lastInsertId();
return $insertID;
}
public function query($query, $parameters) {
$stmt = $this->_connection->prepare($query);
$stmt->execute($parameters);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $results;
}
}
Presupponendo che sia il database custom che quello della nuova installazione di WordPress siano sullo stesso host, inserite il codice della classe in un file che chiamerete ad esempio My_DB.php
e aggiungetelo alla directory principale del tema in uso.
Quindi create una pagina vuota in WordPress e usate il seguente template di pagina (template-import.php
) che inserirete sempre nella directory principale del tema in uso:
<?php
/* Template Name: Import */
require_once( 'My_DB.php' );
get_header();
?>
<?php
$db = new Database();
// Ipotesi di importazione
$total = 0;
$articles = $db->fetch( "SELECT * FROM articoli" );
foreach( $articles as $article ) {
$args = array(
'post_type' => 'post',
'post_content' => $article['testo'],
'post_title' => $article['titolo'],
'post_date' => $article['data'],
'post_status' => 'publish',
'post_author' => 1 // ID utente a cui volete assegnare i post
);
$post_id = wp_insert_post( $args );
if( !is_wp_error( $post_id ) ) {
$total++;
}
}
echo $total . ' articoli importati';
?>
<?php get_footer(); ?>
Se il database custom presenta numerosi record, vi consiglio di effettuare la procedura in locale dopo aver clonato i dati remoti.