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.

  • Piotrek

    Witam, testował ktoś ten kod i mu działało? Jak tak to prosiłbym o dane o strukturze tabeli mysql oraz o kod php, bo jak u siebie stosuję zgodnie z powyższymi radami to mi nie działa :(

    • Piotrek

      Już działa :) po prostu w linijce "equire('./wp-load.php');" zamiast equire powinno być require :)

    • Gerard Stańczak

      poprawione dzięki