Gato GraphQL + Bricks Builder demosu

Bricks Sayfasını veya Şablonunu Siteler Arasında Aktarma

Bu WordPress sitesinden bir Bricks sayfası veya şablonunu alın ve aşağı akış WordPress sitesinde çoğaltın

Leonardo Losoviz
Leonardo Losoviz -
Logo
Image
Target Image

Bu WordPress sitesinden bir Bricks sayfası veya şablonunu dışa aktarıp aşağı akış WordPress sitesinde çoğaltmak için Gato GraphQL'i Bricks eklentisiyle birlikte kullanabiliriz.

Bu query, bir Bricks sayfasını veya şablonunu bu WordPress sitesinden aşağı akış WordPress sitesine aktarır.

Gato GraphQL eklentisinin (ücretsiz sürümü) aşağı akış web sitesine kurulu olması gerekir. "Nested mutations" etkinleştirilmiş bir endpoint sunmalıdır.

Her iki sitenin de ilgili özel gönderi türüne erişime izin vermesi gerekir: bricks_template ve/veya page.

$update parametresi, aşağı akış sitesinde bir sayfa/şablon oluşturulup oluşturulmayacağını ya da güncelleneceğini belirtir.

Sayfa/şablon güncelleniyorsa, kaynak ve aşağı akış siteleri arasındaki ortak tanımlayıcı slug'dur.

Aşağıdaki değişkenleri sağlamanız gerekir:

  • postSlug: Aktarılacak Bricks sayfasının veya şablonunun slug'u
  • downstreamServerGraphQLEndpointURL: Aşağı akış WordPress sitesinin GraphQL endpoint URL'si
  • update: Aşağı akış sitesinde sayfa/şablonu oluşturmak (false) veya güncellemek (true) için
  • username: Aşağı akış sitesinde kimlik doğrulama için kullanıcı adı
  • appPassword: Aşağı akış sitesinde kimlik doğrulama için uygulama şifresi

GraphQL query şu şekildedir:

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
          }
        ]
      }
    }
  )
}

Değişkenler şu şekilde görünecektir:

{
  "postSlug": "my-bricks-page",
  "downstreamServerGraphQLEndpointURL": "https://downstream-site.com/graphql",
  "update": false,
  "username": "admin",
  "appPassword": "your-app-password"
}

Bültenimize abone olun

Gato GraphQL'deki tüm güncellemelerden haberdar olun.