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ą:
[php]$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);[/php]

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

[php]$sql = "SELECT * FROM `jp_news`;";
$result = mysql_query($sql);[/php]

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.

[php]$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();[/php]

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.

[php]require(‚./wp-load.php’);
foreach ($posts as $post) {
wp_insert_post($post);
}[/php]

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.

5 Komentarze

  1. 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 :(

  2. Fajny poradnik. Czy istnieje szansa aby zmigrować w ten sposób obrazki ?

    Np chciałbym stworzyć 1000 wpisów , każdy z innym obrazkiem , każdy wpis 5 dni później.

  3. Ciekawy artykul. Jak taki kod uruchomic? tzn. Mam np. jakas stara baze na sewerze. Chcialbym na nowo postawionym wordpress wrzucic / przeniesc newsy czy artykuly z tej bazy…
    Rozumiem, że dzieki takiemu (tzn. tego typu rozwiazaniu) mozna to wykonac?
    Jak to zrobic? gdzie kod umiescic w jakim pliku i jak go uruchomic aby przecwiczyc?

Odpowiedz