WordPress: procedura di importazione da un database custom

Short link

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.