Pelajaran 8: Migrasi situs
Kita dapat menjalankan sekumpulan GraphQL queries untuk mengadaptasi konten di situs saat memigrasikannya ke domain baru, memindahkan halaman ke URL yang berbeda, atau lainnya.
Agar GraphQL query ini berfungsi, Konfigurasi Skema yang diterapkan pada endpoint perlu mengaktifkan Nested Mutations
Mengadaptasi konten ke domain baru
GraphQL query ini pertama-tama memfilter semua posting yang mengandung "https://my-old-domain.com" dalam kontennya, dan mengganti string ini dengan "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
}
}
}
}Mengadaptasi konten ke URL posting atau halaman baru
Setelah mengubah slug dari sebuah posting atau halaman, kita dapat mengonversi semua konten agar mengarah ke URL baru.
GraphQL query ini pertama-tama mengambil domain dari pengaturan WordPress "siteurl" untuk membuat ulang URL lama dan baru dari halaman tersebut:
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
}
}
}
}Kita kemudian menyediakan slug halaman lama dan baru melalui dictionary variables:
{
"oldPageSlug": "/privacy/",
"newPageSlug": "/user-privacy/"
}