Eine Bricks-Seite oder -Vorlage zwischen Sites übertragen
Eine Bricks-Seite oder -Vorlage von dieser WordPress-Site abrufen und auf einer nachgelagerten WordPress-Site replizieren

Wir können Gato GraphQL mit der Bricks-Erweiterung verwenden, um eine Bricks-Seite oder -Vorlage von dieser WordPress-Site zu exportieren und auf einer nachgelagerten WordPress-Site zu replizieren.
Diese query exportiert eine Bricks-Seite oder -Vorlage von dieser WordPress-Site auf eine nachgelagerte WordPress-Site.
Das Gato GraphQL-Plugin (kostenlose Version) muss auf der nachgelagerten Website installiert sein. Es muss einen Endpoint bereitstellen, bei dem „Nested mutations" aktiviert sind.
Beide Sites müssen den Zugriff auf den entsprechenden Custom Post Type erlauben, bricks_template und/oder page.
Der Parameter $update gibt an, ob eine Seite/Vorlage auf der nachgelagerten Site erstellt oder aktualisiert werden soll.
Wenn die Seite/Vorlage aktualisiert wird, ist der gemeinsame Bezeichner zwischen der vor- und nachgelagerten Site der Slug.
Wir müssen die folgenden Variablen angeben:
postSlug: Der Slug der zu übertragenden Bricks-Seite oder -VorlagedownstreamServerGraphQLEndpointURL: Die GraphQL-Endpoint-URL der nachgelagerten WordPress-Siteupdate: Ob die Seite/Vorlage auf der nachgelagerten Site erstellt (false) oder aktualisiert (true) werden sollusername: Der Benutzername zur Authentifizierung auf der nachgelagerten SiteappPassword: Das Anwendungspasswort zur Authentifizierung auf der nachgelagerten Site
Hier ist die GraphQL-query:
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
}
]
}
}
)
}Die Variablen würden so aussehen:
{
"postSlug": "my-bricks-page",
"downstreamServerGraphQLEndpointURL": "https://downstream-site.com/graphql",
"update": false,
"username": "admin",
"appPassword": "your-app-password"
}