Gato GraphQL + Meta Box demosu
2 site arasında gönderi senkronizasyonu, Meta Box (ve Slim SEO) meta verileri dahil
WordPress için Gato GraphQL kullanarak bir gönderiyi ve Meta Box verilerini (ayrıca Slim SEO) bir WordPress sitesinden diğerine senkronize edin
Leonardo Losoviz -


Meta Box aracılığıyla yönetilen veya Slim SEO (ya da diğer eklentiler) tarafından eklenen meta veriler dahil, bir gönderiyi bir WordPress sitesinden diğerine senkronize edebiliriz.
Bu demoda, GraphQL kullanarak şunları yapacağız:
- Kaynak siteden bir gönderiyi ve tüm meta verilerini çekme
- Hedef sitede yeni bir gönderi oluşturma veya mevcut bir gönderiyi güncelleme ve kaynak siteden gönderi verilerini ile meta verilerini kopyalama
Bu query şunları gerektirir:
- Kaynak sitede Gato GraphQL + PRO uzantıları
- Hedef sitede ücretsiz Gato GraphQL eklentisi
- Hedef sitenin endpoint'inde etkinleştirilmiş İç içe Mutations
Aşağıdaki değişkenleri sağlamamız gerekir:
postType: Siteler arasında senkronize edilecek gönderinin özel gönderi türüpostSlug: Siteler arasında senkronize edilecek gönderinin slug'ıdownstreamServerGraphQLEndpointURL: Hedef WordPress sitesinin GraphQL endpoint URL'siusername: Hedef sitede kimlik doğrulamak için kullanılacak uygulama şifresinin kullanıcı adıappPassword: Hedef sitede kimlik doğrulamak için kullanılacak uygulama şifresinin parolasıupdate: Mevcut bir gönderiyi güncelleyip güncellemeyeceğiniz (true) veya yeni bir tane oluşturup oluşturmayacağınız (false)
Gönderi güncelleniyorsa, yukarı akış ve aşağı akış siteleri arasındaki ortak tanımlayıcı gönderi slug'ıdır.
GraphQL query'si kaynak sitede çalıştırılmalıdır.
İşte GraphQL query'si:
query CheckHasCustomPost($postSlug: String!, $postType: String! = post)
{
customPost(by: { slug: $postSlug }, status: any, customPostTypes: [$postType])
@fail(
message: "There is no post in the upstream site with the provided slug"
data: {
slug: $postSlug
}
)
{
rawTitle
@export(as: "postTitle")
rawContent
@export(as: "postContent")
rawExcerpt
@export(as: "postExcerpt")
metaKeys(filter: { exclude: [
"_thumbnail_id",
"_edit_last",
] })
meta(keys: $__metaKeys)
@export(as: "postMeta")
}
isMissingPostInUpstream: _isNull(value: $__customPost)
@export(as: "isMissingPostInUpstream")
}
query ExportCreateCustomPostOnTargetSiteGraphQLQuery(
$update: Boolean! = false
)
@depends(on: "CheckHasCustomPost")
@skip(if: $isMissingPostInUpstream)
@skip(if: $update)
{
query: _echo(value: """
mutation CreateCustomPost(
$postType: String! = post
$postSlug: String!
$postTitle: String!
$postExcerpt: String!
$postContent: String!
$postMeta: NullableListValueJSONObject!
) {
createCustomPost(input: {
customPostType: $postType
title: $postTitle,
excerpt: $postExcerpt,
slug: $postSlug,
contentAs: { html: $postContent },
status: draft,
meta: $postMeta,
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
__typename
...on CustomPost {
customPostType
title
excerpt
slug
content
status
}
}
}
}
"""
)
@export(as: "query")
@remove
}
query ExportUpdateCustomPostOnTargetSiteGraphQLQuery(
$update: Boolean! = false
)
@depends(on: "CheckHasCustomPost")
@skip(if: $isMissingPostInUpstream)
@include(if: $update)
{
query: _echo(value: """
mutation UpdateCustomPost(
$postType: String! = post
$postSlug: String!
$postTitle: String!
$postContent: String!
$postExcerpt: String!
$postMeta: NullableListValueJSONObject!
) {
customPost(by: { slug: $postSlug }, status: any, customPostTypes: [$postType]) {
update(input: {
title: $postTitle,
excerpt: $postExcerpt,
contentAs: { html: $postContent },
meta: $postMeta,
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
__typename
...on CustomPost {
customPostType
title
excerpt
slug
content
status
}
}
}
}
}
"""
)
@export(as: "query")
@remove
}
query CreateOrUpdateCustomPostOnTargetSite(
$downstreamServerGraphQLEndpointURL: String!
$postSlug: String!
$username: String!
$appPassword: String!
$postType: String! = post
)
@depends(on: [
"ExportCreateCustomPostOnTargetSiteGraphQLQuery",
"ExportUpdateCustomPostOnTargetSiteGraphQLQuery",
])
@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: "postSlug",
value: $postSlug
},
{
name: "postTitle",
value: $postTitle
},
{
name: "postContent",
value: $postContent
},
{
name: "postExcerpt",
value: $postExcerpt
},
{
name: "postMeta",
value: $postMeta
},
{
name: "postType",
value: $postType
}
],
options: {
headers: [
{
name: "Authorization",
value: $__loginCredentialsHeaderValue
}
]
}
}
)
}Değişkenler şu şekilde görünecektir:
{
"postType": "post",
"postSlug": "hello-world",
"downstreamServerGraphQLEndpointURL": "https://target-site.com/graphql",
"update": false,
"username": "admin",
"appPassword": "{ application password, eg: cNEp BVPy QVxF eVqH lggt BTb4 }"
}