Tutorial del esquema
Tutorial del esquemaLección 8: Migraciones de sitio

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/"
}