Lección 8: Migraciones de sitio
Podemos ejecutar un lote de consultas GraphQL para adaptar el contenido del sitio al migrarlo a un nuevo dominio, mover páginas a una URL diferente, u otros.
Para que esta consulta GraphQL funcione, la Creando una configuración del esquema aplicada al endpoint necesita tener las Usar mutaciones anidadas habilitadas
Adaptando contenido al nuevo dominio
Esta consulta GraphQL primero filtra todas las entradas que contienen "https://my-old-domain.com" en su contenido, y reemplaza este string con "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
}
}
}
}Adaptando contenido a una nueva URL de entrada o página
Después de cambiar el slug de una entrada o página, podemos convertir todo el contenido para que apunte a la nueva URL.
Esta GraphQL primero recupera el dominio desde el ajuste "siteurl" de WordPress para recrear las URLs antigua y nueva de la página:
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
}
}
}
}Luego proporcionamos los slugs de página antiguo y nuevo mediante el diccionario variables:
{
"oldPageSlug": "/privacy/",
"newPageSlug": "/user-privacy/"
}