4 min
26 września 2024
Jak migrować z Wordpress do Storyblok
Przejście z jednej platformy do zarządzania treścią (CMS) na drugą może wydawać się skomplikowanym zadaniem, zwłaszcza gdy przechodzimy z popularnego Wordpressa na nowoczesne i elastyczne rozwiązanie, jakim jest Storyblok. W tym artykule omówimy kluczowe kroki tego procesu, w tym szczegółową implementację rozwiązania problemu związanego z przechowywaniem danych na blogu oraz czas potrzebny na przygotowanie i wdrożenie.
Posłuchaj artykułu w wersji audio.
Przygotowanie do migracji
Migracja treści z Wordpress do Storyblok wymaga dokładnego zaplanowania. Przede wszystkim warto sporządzić listę wszystkich elementów, które będą migrowane: posty, strony, kategorie, tagi, linki media plików oraz inne dane.
Eksport danych z Wordpressa
Następny krok to eksport danych z Wordpressa. Wordpress oferuje narzędzia do eksportu treści w formacie XML, który zawiera wszystkie posty, strony, kategorie oraz inne istotne elementy.
Warto zwrócić uwagę na:
Eksportowanie niestandardowych pól i metadanych – jeżeli korzystasz z niestandardowych pól, musisz zadbać o ich odpowiednią migrację.
Import danych do Storyblok
Po zakończeniu eksportu danych z Wordpressa, kolejnym krokiem jest importowanie ich do Storyblok. Proces ten może być bardziej złożony, ponieważ Storyblok ma inną strukturę danych niż Wordpress. Nasza implementacja tego rozwiązania obejmuje:
Przekształcenie danych – XML z Wordpressa należy przekształcić na format kompatybilny ze Storyblok, np. JSON lub przekształcony XML .
Importowanie treści – za pomocą API Storyblok można zaimportować przekształcone dane. Ważne jest, aby dokładnie odwzorować strukturę treści, aby była zgodna z nowym systemem.
Przykłady
Potrzebujesz identyfikatora story (storyId ) i identyfikatora projektu (spaceId ), do której chcesz zaimportować story. Musisz złożyć żądanie PUT i dodać autoryzację do nagłówka z osobistym tokenem dostępu 0auth ( Link ) jako wartością. Treść żądania powinna zawierać story, którą chcesz zaimportować w tym formacie
{"data": YOUR_STRINGIFIED_IMPORT_STORY}.
Ważne jest, aby pamiętać, że zaimportowane historie mogą być tylko w formacie JSON lub XML i odpowiednio sformatowane do standardów Storyblok
Import Stories as XML
Endpoint
https://mapi.storyblok.com/v1/spaces/:space_id/stories/:story_id/import.xml
Method
PUT
Header
Authorization: YOUR_OAUTH_TOKEN
Body
{"data": YOUR_IMPORT_XML}
Przykład
import StoryblokClient from "storyblok-js-client";
const Storyblok = new StoryblokClient({
oauthToken: "YOUR_OAUTH_TOKEN",
});
const spaceId = 134345;
const storyId = 36230141;
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<page text_nodes="0" filename="building-a-food-store" url="posts/building-a-food-store" id="86930141" language="default">
<name>Building a phone store</name>
<tags>
<tag id="69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:image" type="STRING">
<text>
<![CDATA[//a.storyblok.com/f/134445/1500x844/19eeaff370/eeacbea1-99a3-4a96-8ee9-980ae5f9dfe6.jpeg]]>
</text>
</tag>
<tag id="69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:intro" type="STRING">
<text>
<![CDATA[phone stores are important for mankind]]>
</text>
</tag>
<tag id="69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:title" type="STRING">
<text>
<![CDATA[Building a phone store]]>
</text>
</tag>
<tag id="69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:author" type="STRING">
<text>
<![CDATA[cd9f7534-b437-4d3f-b23d-022f464f4cf3]]>
</text>
</tag>
<tag id="69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:richtext:long_text" type="STRING">
<text>
<![CDATA[{"type":"doc","content":[{"type":"paragraph","content":[{"text":"this is a phone store ","type":"text"}]}]}]]>
</text>
</tag>
</tags>
</page>`;
const importXmlStory = async () => {
try {
const response = await Storyblok.put(`spaces/${spaceId}/stories/${storyId}/import.xml`, {
data: xml
});
console.log(response.data);
} catch (error) {
console.error("Error:", error);
}
};
importXmlStory();
Import Stories as JSON
Endpoint
https://mapi.storyblok.com/v1/spaces/:space_id/stories/:story_id/import.json
Method
PUT
Header
Authorization: YOUR_OAUTH_TOKEN
Body
{"data": YOUR_IMPORT_JSON }
Przykład
import StoryblokClient from "storyblok-js-client";
const Storyblok = new StoryblokClient({
oauthToken: "YOUR_OAUTH_TOKEN",
});
const spaceId = 134345;
const pageId = 36230141;
const authToken = "YOUR_OAUTH_TOKEN";
const json = {
"69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:author": "cd9f7534-b437-4d3f-b23d-022f464f4cf3",
"69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:image": "//a.storyblok.com/f/134445/1500x844/19eeaff370/eeacbea1-99a3-4a96-8ee9-980ae5f9dfe6.jpeg",
"69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:intro": "iphone stores are important for mankind",
"69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:richtext:long_text": '{"type":"doc","content":[{"type":"paragraph","content":[{"text":"this is an iPhone store ","type":"text"}]}]}',
"69c9f9dd-b5e5-4859-a5ee-0bf8a1319c8e:Post:title": "Building an iPhone store",
language: "default",
page: `${pageId}`,
text_nodes: 0,
url: "posts/building-an-iphone-store",
};
const importStory = async () => {
try {
const response = await Storyblok.put(`spaces/${spaceId}/stories/${pageId}/import.json`, {
data: JSON.stringify(json),
});
console.log(response.data);
} catch (error) {
console.error("Error:", error);
}
};
importStory();
Podsumowanie
Cały proces migracji, włącznie z eksportem, przekształceniem danych i ich importem do Storyblok, może zająć od kilku godzin do kilku dni, w zależności od wielkości i złożoności bloga. Kluczowe jest tu przygotowanie oraz testowanie, które może znacznie przyspieszyć wdrożenie nowej platformy.