Mentransfer halaman atau template Bricks antar situs
Ambil halaman atau template Bricks dari situs WordPress ini, dan replikasikan ke situs WordPress tujuan

Kita dapat menggunakan Gato GraphQL dengan ekstensi Bricks untuk mengekspor halaman atau template Bricks dari situs WordPress ini dan mereplikasinya ke situs WordPress tujuan.
Query ini mengekspor halaman atau template Bricks dari situs WordPress ini ke situs WordPress tujuan.
Plugin Gato GraphQL (versi gratis) harus diinstal di situs tujuan. Plugin tersebut harus mengekspos sebuah endpoint dengan "Nested mutations" diaktifkan.
Kedua situs harus mengizinkan akses ke custom post type yang sesuai, bricks_template dan/atau page.
Parameter $update menunjukkan apakah akan membuat atau memperbarui halaman/template di situs tujuan.
Jika memperbarui halaman/template, pengenal yang sama antara situs asal dan tujuan adalah slug.
Kita harus menyediakan variabel-variabel berikut:
postSlug: Slug dari halaman atau template Bricks yang akan ditransferdownstreamServerGraphQLEndpointURL: URL endpoint GraphQL dari situs WordPress tujuanupdate: Apakah akan membuat (false) atau memperbarui (true) halaman/template di situs tujuanusername: Nama pengguna untuk autentikasi di situs tujuanappPassword: Application password untuk autentikasi di situs tujuan
Berikut adalah query GraphQL:
query GetPostData(
$postTypes: [String!]! = ["bricks_template", "page"]
$postSlug: String!
) {
customPost(by: { slug: $postSlug }, customPostTypes: $postTypes, status: any)
@fail(
message: "There is no Bricks page or template in the upstream site with the provided slug"
data: {
slug: $postSlug
}
)
{
rawTitle
@export(as: "postTitle")
rawContent
@export(as: "postContent")
rawExcerpt
@export(as: "postExcerpt")
status
@export(as: "postStatus")
customPostType
@export(as: "postType")
metaKeys(filter: { exclude: ["_edit_last", "_edit_lock", "_pingme", "_encloseme", "_trackbackme", "enclosure", "_thumbnail_id", "_wp_trash_meta_status", "_wp_trash_meta_time", "_wp_desired_post_slug", "_wp_old_slug", "_wp_old_date"] })
meta(keys: $__metaKeys)
@export(as: "postMeta")
}
isMissingPostInUpstream: _isNull(value: $__customPost)
@export(as: "isMissingPostInUpstream")
}
query ExportDownstreamGraphQLQuery
@depends(on: "GetPostData")
@skip(if: $isMissingPostInUpstream)
{
query: _echo(value: """
mutation UpdatePost(
$update: Boolean! = false
$postSlug: String!
$postTitle: String!
$postContent: String!
$postExcerpt: String!
$postStatus: CustomPostStatusEnum!
$postType: String!
$postMeta: JSONObject!
) {
customPost(by: { slug: $postSlug }, customPostTypes: [$postType], status: any)
@include(if: $update)
{
id
update(input: {
title: $postTitle,
contentAs: { html: $postContent },
excerpt: $postExcerpt,
status: $postStatus,
meta: $postMeta
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
...on GenericCustomPostUpdateMutationPayload {
customPost {
...CustomPostData
}
}
...on PostUpdateMutationPayload {
post {
...CustomPostData
}
}
...on PageUpdateMutationPayload {
page {
...CustomPostData
}
}
}
}
createCustomPost(input: {
title: $postTitle,
slug: $postSlug,
contentAs: { html: $postContent },
excerpt: $postExcerpt,
status: $postStatus,
customPostType: $postType,
meta: $postMeta
})
@skip(if: $update)
{
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
...CustomPostData
}
}
}
fragment CustomPostData on CustomPost {
id
title
slug
content
excerpt
status
meta(keys: [
"_bricks_editor_mode",
"_bricks_template_type",
"_bricks_page_content_2",
"_bricks_page_header_2",
"_bricks_page_footer_2",
])
}
"""
)
@export(as: "query")
@remove
}
query ExportPostToWPSite(
$downstreamServerGraphQLEndpointURL: String!
$update: Boolean! = false
$username: String!
$appPassword: String!
$postSlug: String!
)
@depends(on: "ExportDownstreamGraphQLQuery")
@skip(if: $isMissingPostInUpstream)
{
loginCredentials: _sprintf(
string: "%s:%s",
values: [$username, $appPassword]
)
@remove
base64EncodedLoginCredentials: _strBase64Encode(
string: $__loginCredentials
)
@remove
loginCredentialsHeaderValue: _sprintf(
string: "Basic %s",
values: [$__base64EncodedLoginCredentials]
)
@remove
_sendGraphQLHTTPRequest(
input: {
endpoint: $downstreamServerGraphQLEndpointURL,
query: $query,
variables: [
{
name: "update",
value: $update
},
{
name: "postType",
value: $postType
},
{
name: "postSlug",
value: $postSlug
},
{
name: "postTitle",
value: $postTitle
},
{
name: "postContent",
value: $postContent
},
{
name: "postExcerpt",
value: $postExcerpt
},
{
name: "postStatus",
value: $postStatus
},
{
name: "postMeta",
value: $postMeta
}
],
options: {
headers: [
{
name: "Authorization",
value: $__loginCredentialsHeaderValue
}
]
}
}
)
}Variabel-variabelnya akan terlihat seperti ini:
{
"postSlug": "my-bricks-page",
"downstreamServerGraphQLEndpointURL": "https://downstream-site.com/graphql",
"update": false,
"username": "admin",
"appPassword": "your-app-password"
}