JetEngine
JetEngineJetEngine CCTS

JetEngine CCTS

Tích hợp với plugin JetEngine của Crocoblock.

Schema GraphQL được bổ sung các trường để truy vấn dữ liệu Custom Content Type (CCT).

Các trường gốc

TrườngMô tả
jetengineCCTEntriesTrả về danh sách các mục CCT (kiểu JetEngineCCTEntry).
jetengineCCTEntryCountTrả về số lượng mục CCT.
jetengineCCTEntryTrả về một mục CCT duy nhất (kiểu JetEngineCCTEntry).

Slug của CCT phải được cung cấp qua đối số slug (CCT phải được đặt là có thể truy vấn trong phần Cài đặt của plugin, xem bên dưới).

Kiểu JetEngineCCTEntry

Trên kiểu JetEngineCCTEntry, chúng ta có thể truy vấn các giá trị trường thông qua:

TrườngMô tả
idID cơ sở dữ liệu của mục.
uniqueIDĐịnh danh duy nhất cho mục, được tạo từ slug CCT và ID của mục.
cctSlugSlug của CCT mà mục này thuộc về.
statusTrạng thái của mục (ví dụ: publish, draft).
createdDateThời điểm mục được tạo.
createdDateStrNgày tạo mục, được định dạng dưới dạng chuỗi.
modifiedDateThời điểm mục được sửa đổi lần cuối.
modifiedDateStrNgày sửa đổi lần cuối của mục, được định dạng dưới dạng chuỗi.
authorIDID của tác giả mục.
authorĐối tượng kết nối người dùng tác giả.
singleCustomPostIDID của single custom post được liên kết, nếu có.
singleCustomPostĐối tượng kết nối single custom post được liên kết.
fieldValuesĐối tượng JSON chứa tất cả các trường CCT cho mục đó.
fieldValue(slug)Để truy vấn một trường duy nhất theo slug.

Giá trị trường CCT

Các giá trị từ fieldValue(slug) và từ mỗi khóa trong fieldValues được chuyển đổi kiểu dựa trên kiểu trường được định nghĩa trong CCT.

Các trường ID ngầm định (luôn được chuyển đổi thành int khi có mặt và không rỗng): id, singleCustomPostID, authorID.

Cách mỗi kiểu trường CCT được chuyển đổi trong phản hồi GraphQL:

Text (mặc định): Không thay đổi (chuỗi hoặc như đã lưu trữ).
Number: float nếu có dấu thập phân; ngược lại là int.
Switcher: Boolean; true cho 1, true, yes, on (không phân biệt chữ hoa/thường).
Media: "ID" → int; "Both" → đối tượng { id, url }; ngược lại không thay đổi.
Gallery: ID phân tách bằng dấu phẩy hoặc mảng ID → int[].
Checkbox: Mảng; nếu trường là "kiểu mảng" → danh sách giá trị; ngược lại là đối tượng có khóa.
Posts: Đơn → int; nhiều → int[].
Repeater: Mảng các hàng; các trường con được chuyển đổi kiểu đệ quy theo loại.

Ví dụ bên dưới sử dụng một CCT với slug "sample_cct" và các trường thuộc nhiều kiểu khác nhau (text, number, gallery, v.v.).

Các trường của một CCT
Các trường của một CCT

Thực thi query sau:

query JetEngineCCTEntries {
  jetengineCCTEntry(cctSlug: "sample_cct", by: { id: 1 }) {
    label_text: fieldValue(slug: "label_text")
    textarea: fieldValue(slug: "textarea")
    date: fieldValue(slug: "date")
    time: fieldValue(slug: "time")
    datetime: fieldValue(slug: "datetime")
    wysisyg: fieldValue(slug: "wysisyg")
    switcher: fieldValue(slug: "switcher")
    checkbox: fieldValue(slug: "checkbox")
    checkbox_array: fieldValue(slug: "checkbox_array")
    iconpicker: fieldValue(slug: "iconpicker")
    media_id: fieldValue(slug: "media_id")
    media_url: fieldValue(slug: "media_url")
    media_array: fieldValue(slug: "media_array")
    gallery: fieldValue(slug: "gallery")
    radio: fieldValue(slug: "radio")
    repeater: fieldValue(slug: "repeater")
    options_select: fieldValue(slug: "options_select")
    options_multiple_select: fieldValue(slug: "options_multiple_select")
    number: fieldValue(slug: "number")
    colorpicker: fieldValue(slug: "colorpicker")
    post: fieldValue(slug: "post")
    posts: fieldValue(slug: "posts")
  }
}

...mỗi trường trong phản hồi được chuyển đổi sang kiểu CCT tương ứng:

{
  "data": {
    "jetengineCCTEntry": {
      "label_text": "Some label",
      "textarea": "Some description here\r\n\r\nSome description there",
      "date": "2026-01-24",
      "time": "09:13",
      "datetime": "2026-03-07T08:00",
      "wysisyg": "<p>Some <strong>description</strong> here</p>\n<p><em>Some description</em> there</p>\n<p>Some <a href=\"https://gatoplugins.com\">link</a></p>\n",
      "switcher": true,
      "checkbox": {
        "one": true,
        "two": false,
        "three": true
      },
      "checkbox_array": [
        "one",
        "two"
      ],
      "iconpicker": "fa fa-road",
      "media_id": 1362,
      "media_url": "https://gatographql.com/wp-content/uploads/GatoGraphQL-logo.webp",
      "media_array": {
        "id": 1380,
        "url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg"
      },
      "gallery": [
        1361,
        1362,
        1363
      ],
      "radio": "1",
      "repeater": [
        {
          "label_(text)": "First item in repeater",
          "date": "2026-01-17",
          "time": "11:00",
          "datetime": "2026-01-16T11:16",
          "textarea": "Gato GraphQL provides a multitude of interactive clients,",
          "wysiwyg": "<p>Gato GraphQL provides a <strong>multitude of interactive clients</strong>, and a user interface based on the <a href=\"https://wordpress.org\">WordPress editor</a>, so that anybody can operate it, whether a developer or not.</p>\n",
          "switcher": true,
          "iconpicker": "fa fa-inbox",
          "media_id": 1361,
          "media_url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg",
          "media_array": {
            "id": 1380,
            "url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg"
          },
          "gallery": [
            1363,
            1361
          ],
          "radio": "two",
          "options_select": "three",
          "options_multiple_select": [
            "two",
            "four"
          ],
          "number": 22,
          "colorpicker": "#757575",
          "post": 1140,
          "posts": [
            1,
            2
          ]
        },
        {
          "label_(text)": "Second item in repeater",
          "date": "2026-01-15",
          "time": "00:18",
          "datetime": "2026-01-18T00:00",
          "textarea": "These clients make it very easy to interact with Gato GraphQL",
          "wysiwyg": "<p>These clients <strong>make it very easy to interact with Gato GraphQL</strong>, directly within the <em>wp-admin</em> (and without the need of any PHP code), reducing friction and removing barriers so that anyone (developers and non-developers alike) can use it.</p>\n",
          "switcher": false,
          "iconpicker": "fa fa-search-plus",
          "media_id": 1362,
          "media_url": "https://gatographql.com/wp-content/uploads/LICENSE.txt",
          "media_array": {
            "id": 1363,
            "url": "https://gatographql.com/wp-content/uploads/LICENSE.txt"
          },
          "gallery": [
            1380,
            1361,
            1362
          ],
          "radio": "three",
          "options_select": "three",
          "options_multiple_select": [
            "three"
          ],
          "number": 4469,
          "colorpicker": "#2d2270",
          "post": 2,
          "posts": [
            1688,
            1682
          ]
        }
      ],
      "options_select": "1",
      "options_multiple_select": [
        "one",
        "two",
        "five"
      ],
      "number": 66778899,
      "colorpicker": "#721abf",
      "post": 1,
      "posts": [
        1140,
        1113
      ]
    }
  }
}

Cùng một cơ chế chuyển đổi kiểu áp dụng cho mọi trường trong JSON được trả về bởi fieldValues:

query JetEngineCCTEntries {
  jetengineCCTEntry(cctSlug: "sample_cct", by: { id: 1 }) {
    fieldValues
  }
}

...trả về:

{
  "data": {
    "jetengineCCTEntry": {
      "fieldValues": {
        "label_text": "Some label",
        "textarea": "Some description here\r\n\r\nSome description there",
        "date": "2026-01-24",
        "time": "09:13",
        "datetime": "2026-03-07T08:00",
        "wysisyg": "<p>Some <strong>description</strong> here</p>\n<p><em>Some description</em> there</p>\n<p>Some <a href=\"https://gatoplugins.com\">link</a></p>\n",
        "switcher": true,
        "checkbox": {
          "one": true,
          "two": false,
          "three": true
        },
        "checkbox_array": [
          "one",
          "two"
        ],
        "iconpicker": "fa fa-road",
        "media_id": 1362,
        "media_url": "https://gatographql.com/wp-content/uploads/GatoGraphQL-logo.webp",
        "media_array": {
          "id": 1380,
          "url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg"
        },
        "gallery": [
          1361,
          1362,
          1363
        ],
        "radio": "1",
        "repeater": [
          {
            "label_(text)": "First item in repeater",
            "date": "2026-01-17",
            "time": "11:00",
            "datetime": "2026-01-16T11:16",
            "textarea": "Gato GraphQL provides a multitude of interactive clients,",
            "wysiwyg": "<p>Gato GraphQL provides a <strong>multitude of interactive clients</strong>, and a user interface based on the <a href=\"https://wordpress.org\">WordPress editor</a>, so that anybody can operate it, whether a developer or not.</p>\n",
            "switcher": true,
            "iconpicker": "fa fa-inbox",
            "media_id": 1361,
            "media_url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg",
            "media_array": {
              "id": 1380,
              "url": "https://gatographql.com/wp-content/uploads/Funny-Dog.jpg"
            },
            "gallery": [
              1363,
              1361
            ],
            "radio": "two",
            "options_select": "three",
            "options_multiple_select": [
              "two",
              "four"
            ],
            "number": 22,
            "colorpicker": "#757575",
            "post": 1140,
            "posts": [
              1,
              2
            ]
          },
          {
            "label_(text)": "Second item in repeater",
            "date": "2026-01-15",
            "time": "00:18",
            "datetime": "2026-01-18T00:00",
            "textarea": "These clients make it very easy to interact with Gato GraphQL",
            "wysiwyg": "<p>These clients <strong>make it very easy to interact with Gato GraphQL</strong>, directly within the <em>wp-admin</em> (and without the need of any PHP code), reducing friction and removing barriers so that anyone (developers and non-developers alike) can use it.</p>\n",
            "switcher": false,
            "iconpicker": "fa fa-search-plus",
            "media_id": 1362,
            "media_url": "https://gatographql.com/wp-content/uploads/LICENSE.txt",
            "media_array": {
              "id": 1363,
              "url": "https://gatographql.com/wp-content/uploads/LICENSE.txt"
            },
            "gallery": [
              1380,
              1361,
              1362
            ],
            "radio": "three",
            "options_select": "three",
            "options_multiple_select": [
              "three"
            ],
            "number": 4469,
            "colorpicker": "#2d2270",
            "post": 2,
            "posts": [
              1688,
              1682
            ]
          }
        ],
        "options_select": "1",
        "options_multiple_select": [
          "one",
          "two",
          "five"
        ],
        "number": 66778899,
        "colorpicker": "#721abf",
        "post": 1,
        "posts": [
          1140,
          1113
        ]
      }
    }
  }
}

Cấp quyền truy cập vào CCT

Theo mặc định, không có CCT nào có thể được truy vấn.

Để cấp quyền truy cập vào một CCT, CCT đó phải được đặt là có thể truy vấn trong phần Cài đặt của plugin.

Có 2 nơi mà cấu hình này có thể được thực hiện, theo thứ tự ưu tiên:

  1. Tùy chỉnh: Trong Schema Configuration tương ứng
  2. Chung: Trong trang Cài đặt

Trong Schema Configuration được áp dụng cho endpoint, chọn tùy chọn Use custom configuration rồi nhập các mục mong muốn:

Định nghĩa các CCT có thể truy vấn trong Schema Configuration
Định nghĩa các CCT có thể truy vấn trong Schema Configuration

Nếu không, các mục được định nghĩa trong tùy chọn Queryable JetEngine CCTS dưới phần JetEngine CCTS trong Cài đặt sẽ được sử dụng:

Định nghĩa các CCT có thể truy vấn trong Cài đặt
Định nghĩa các CCT có thể truy vấn trong Cài đặt

Queries mẫu

Liệt kê các mục CCT:

query {
  jetengineCCTEntries(cctSlug: "sample_cct") {
    id
    uniqueID
    cctSlug
    status
    createdDate
    modifiedDate
    authorID
    author {
      id
      name
    }
    singleCustomPostID
    singleCustomPost {
      id
      title
    }
    fieldValues
    someField: fieldValue(slug: "some_field_slug")
  }
}

Mục CCT đơn lẻ theo slug và ID:

query {
  jetengineCCTEntry(cctSlug: "sample_cct", by: { id: 1 }) {
    id
    uniqueID
    cctSlug
    status
    createdDate
    modifiedDate
    author {
      id
      name
    }
    singleCustomPost {
      id
      title
    }
    fieldValues
    someField: fieldValue(slug: "some_field_slug")
  }
}

Liệt kê và đếm các mục CCT với bộ lọc, phân trang và sắp xếp:

query {
  jetengineCCTEntryCount(
    cctSlug: "sample_cct"
    filter: { search: [{ field: "cct_author_id", value: 1, operator: EQUALS }] }
  )
  jetengineCCTEntries(
    cctSlug: "sample_cct"
    filter: { search: [{ field: "cct_author_id", value: 1, operator: EQUALS }] }
    pagination: { limit: 10, offset: 0 }
    sort: { by: "cct_created", order: DESC }
  ) {
    id
    authorID
  }
}