Les 8: Site-migraties
We kunnen een reeks GraphQL-queries uitvoeren om de inhoud van de site aan te passen bij het migreren naar een nieuw domein, het verplaatsen van pagina's naar een andere URL, of andere gevallen.
Om deze GraphQL-query te laten werken, moet de Schema-configuratie die op het eindpunt is toegepast Geneste Mutaties hebben ingeschakeld
Inhoud aanpassen aan het nieuwe domein
Deze GraphQL-query filtert eerst alle posts die "https://my-old-domain.com" bevatten in de inhoud, en vervangt deze tekenreeks door "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
}
}
}
}Inhoud aanpassen aan een nieuwe URL van een bericht of pagina
Na het wijzigen van de slug van een bericht of pagina kunnen we alle inhoud omzetten zodat deze naar de nieuwe URL verwijst.
Deze GraphQL-query haalt eerst het domein op uit de WordPress-instelling "siteurl" om de oude en nieuwe URL van de pagina te reconstrueren:
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
}
}
}
}Vervolgens geven we de oude en nieuwe pagina-slugs op via het woordenboek variables:
{
"oldPageSlug": "/privacy/",
"newPageSlug": "/user-privacy/"
}