Samouczek schematuLekcja 8: Migracje witryny
Lekcja 8: Migracje witryny
Możemy wykonać serię queries GraphQL, aby dostosować zawartość witryny podczas jej migracji do nowej domeny, przenoszenia stron pod inny URL lub w innych przypadkach.
Aby ta query GraphQL działała, Konfiguracja Schema zastosowana do endpointu musi mieć włączone Zagnieżdżone Mutacje
Dostosowywanie treści do nowej domeny
Ta query GraphQL najpierw filtruje wszystkie posty zawierające "https://my-old-domain.com" w swojej treści, a następnie zastępuje ten ciąg znaków przez "https://my-new-domain.com":
mutation ReplaceOldWithNewDomainInPosts {
posts(
filter: {
search: "https://my-old-domain.com"
}
) {
id
rawContent
adaptedRawContent: _strReplace(
search: "https://my-old-domain.com"
replaceWith: "https://my-new-domain.com"
in: $__rawContent
)
update(input: {
contentAs: { html: $__adaptedRawContent }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
rawContent
}
}
}
}Dostosowywanie treści do nowego URL posta lub strony
Po zmianie slugu posta lub strony możemy przekonwertować całą zawartość tak, aby wskazywała na nowy URL.
Ta query GraphQL najpierw pobiera domenę z ustawień WordPress "siteurl", aby odtworzyć stary i nowy URL strony:
query ExportData(
$oldPageSlug: String!
$newPageSlug: String!
) {
siteURL: optionValue(name: "siteurl")
oldPageURL: _strAppend(
after: $__siteURL,
append: $oldPageSlug
) @export(as: "oldPageURL")
newPageURL: _strAppend(
after: $__siteURL,
append: $newPageSlug
) @export(as: "newPageURL")
}
mutation ReplaceOldWithNewURLInPosts
@depends(on: "ExportData")
{
posts(
filter: {
search: $oldPageURL
},
sort: { by: ID, order: ASC }
) {
id
rawContent
adaptedRawContent: _strReplace(
search: $oldPageURL
replaceWith: $newPageURL
in: $__rawContent
)
update(input: {
contentAs: { html: $__adaptedRawContent }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
rawContent
}
}
}
}Następnie podajemy stary i nowy slug strony za pomocą słownika variables:
{
"oldPageSlug": "/privacy/",
"newPageSlug": "/user-privacy/"
}