การถ่ายโอนหน้าหรือเทมเพลต Bricks ข้ามเว็บไซต์
ดึงข้อมูลหน้าหรือเทมเพลต Bricks จากเว็บไซต์ WordPress นี้ และทำซ้ำในเว็บไซต์ WordPress ปลายทาง

เราสามารถใช้ Gato GraphQL ร่วมกับ Bricks extension เพื่อส่งออกหน้าหรือเทมเพลต Bricks จากเว็บไซต์ WordPress นี้ และทำซ้ำในเว็บไซต์ WordPress ปลายทาง
queries นี้ส่งออกหน้าหรือเทมเพลต Bricks จากเว็บไซต์ WordPress นี้ไปยังเว็บไซต์ WordPress ปลายทาง
ต้องติดตั้งปลั๊กอิน Gato GraphQL (เวอร์ชันฟรี) บนเว็บไซต์ปลายทาง และต้องเปิดใช้งาน endpoint ที่เปิดใช้ "Nested mutations"
ทั้งสองเว็บไซต์ต้องอนุญาตการเข้าถึง custom post type ที่เกี่ยวข้อง ได้แก่ bricks_template และ/หรือ page
พารามิเตอร์ $update ระบุว่าจะสร้างหรืออัปเดตหน้า/เทมเพลตในเว็บไซต์ปลายทาง
หากอัปเดตหน้า/เทมเพลต ตัวระบุร่วมระหว่างเว็บไซต์ต้นทางและปลายทางคือ slug
เราต้องระบุตัวแปรดังต่อไปนี้:
postSlug: Slug ของหน้าหรือเทมเพลต Bricks ที่ต้องการถ่ายโอนdownstreamServerGraphQLEndpointURL: URL ของ GraphQL endpoint บนเว็บไซต์ WordPress ปลายทางupdate: จะสร้าง (false) หรืออัปเดต (true) หน้า/เทมเพลตในเว็บไซต์ปลายทางusername: ชื่อผู้ใช้สำหรับการยืนยันตัวตนบนเว็บไซต์ปลายทางappPassword: รหัสผ่านแอปพลิเคชันสำหรับการยืนยันตัวตนบนเว็บไซต์ปลายทาง
ต่อไปนี้คือ GraphQL queries:
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
}
]
}
}
)
}ตัวแปรจะมีลักษณะดังนี้:
{
"postSlug": "my-bricks-page",
"downstreamServerGraphQLEndpointURL": "https://downstream-site.com/graphql",
"update": false,
"username": "admin",
"appPassword": "your-app-password"
}