Przenoszenie danych pomiędzy różnego rodzaju silnikami CMS może być kłopotliwe. Silnik WordPressa pozwala na importowanie wpisów z takich serwisów jak Blogger czy LiveJournal. Możliwy jest również import z innej wersji WordPressa za pomocą specjalnego pliku XML. A co jeśli chcemy przenieść dane ze starego systemu takiego jak np. jPortal lub własnego CMSa, którego dawno porzuciliśmy?

Jak się okazuje nie jest to takie trudne zadanie. Możemy do tego celu wykorzystać funkcję wp_insert_post(). Jest ona wbudowana w silnik WordPressa. Do tego celu napiszemy skrypt PHP, który połączy się ze starą bazą danych i przekonwertuje wpisy.

W pierwszej kolejności musimy połączyć się ze starą bazą:

$db_host = 'localhost';
$db_user = 'jportal';
$db_pass = 'haslo';
$db_name = 'jportal';

mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);

Jeżeli wszystkie dane podaliśmy poprawnie, będziemy mogli wyciągnąć z bazy istniejące wpisy:

$sql = "SELECT * FROM `jp_news`;";
$result = mysql_query($sql);

W następnej kolejności musimy zbudować tablicę zawierającą wpisy skonwertowane do wersji WordPressa. Ustawiamy status wpisu oraz kategorię w jakiej mają się pojawić. Datę newsa musimy podać w formacie: Y-m-d H:i:s.

$i = 0;
while($wiersz = mysql_fetch_array($result))
{	
	$post = array();
	$post['post_status'] = 'publish'; //Opublikuj wpis automatycznie
	$post['post_category'] = array(8104); // Dodaj do kategorii numer 8104
	$post['post_date'] = date('Y-m-d H:i:s',strtotime($wiersz['date'])); // Skonwertuj datę publikacji
	$post['post_title'] = iconv('iso-8859-2','utf-8',$wiersz['title']); // Zmień kodowanie tematu
	$post['post_content'] = iconv('iso-8859-2','utf-8',$wiersz['text'] . "\r\n\r\n" . $wiersz['textcd']); // Zmień kodowanie treści wpisu
	$posts[$i] = $post;
	$i++;
}
mysql_close();

Szczegółowe informacje na temat funkcji wp_insert_post() można przeczytać w dokumentacji. Ostatnim etapem będzie dodanie treści do istniejącego WordPressa.

require('./wp-load.php');
foreach ($posts as $post) {
  wp_insert_post($post);
}

Dodanie około 1000 wpisów na serwerze, zajęło około 8 sekund. Jeżeli posiadamy więcej wpisów, warto je dodawać partiami, aby nie obciążyć znacznie maszyny.