đ Gato GraphQL unterstĂŒtzt jetzt vollstĂ€ndig Advanced Custom Fields (ACF)!
Das letzte v11.3-Release von Gato GraphQL hat Meta-Mutationen eingefĂŒhrt.
In Kombination mit Meta-Feldern und den Funktionen der PRO-Erweiterungen ermöglichen Meta-Mutationen die vollstĂ€ndige Interaktion mit dem Plugin Advanced Custom Fields (ACF) â sowohl das Abrufen als auch das Mutieren von benutzerdefinierten Feldern.
Das bedeutet: Gato GraphQL unterstĂŒtzt ACF jetzt vollstĂ€ndig! đđ„łđđŸđđđ»
Hier sind mehrere queries, die zeigen, wie benutzerdefinierte Felder fĂŒr alle von ACF unterstĂŒtzten Feldtypen abgerufen und mutiert werden können:

Grundlegende Feldtypen abfragen
Die grundlegenden Feldtypen von ACF können direkt ĂŒber das Feld metaValue abgefragt werden:
query GetPost {
post(by: { id: 1 }) {
text: metaValue(key: "text_field")
textarea: metaValue(key: "textarea_field")
number: metaValue(key: "number_field")
range: metaValue(key: "range_field")
email: metaValue(key: "email_field")
url: metaValue(key: "url_field")
password: metaValue(key: "password_field")
}
}Inhalts-Feldtypen abfragen
Ist das benutzerdefinierte Feld eine Beziehung (z. B. ein Bild oder eine Datei), können wir die ID(s) aus den Meta-Feldern exportieren und anschlieĂend diese EntitĂ€ten (vom Typ Media) in einer nachfolgenden Query abfragen.
Andernfalls handelt es sich um einen einfachen Feldtyp, der direkt ĂŒber metaValue abgefragt werden kann:
query GetPostDataAndExportRelationships {
post(by: { id: 1 }) {
# Image field type
imageId: metaValue(key: "image_field")
@export(as: "imageId")
# File field type
fileId: metaValue(key: "file_field")
@export(as: "fileId")
# WYSIWYG editor field type
wysiwyg_editor: metaValue(key: "wysiwyg_editor_field")
# Oembed field type
oembed: metaValue(key: "oembed_field")
}
}
query QueryPostRelationships
@depends(on: "GetPostDataAndExportRelationships")
{
# Query the image
relationshipImage: mediaItem(by: { id: $imageId }) {
id
src
}
# Query the file
relationshipFile: mediaItem(by: { id: $fileId }) {
id
src
}
}Auswahl-Feldtypen abfragen
Auswahl-Feldtypen können wie einfache Feldtypen ĂŒber metaValue abgefragt werden.
ACF speichert Arrays von Werten in einem einzelnen Eintrag, kodiert als JSON-String. Daher muss das Feld metaValue (statt metaValues) verwendet werden, um das Array abzurufen.
FĂŒr boolesche Werte wird das Feld _equals verwendet, um den Wert von String nach Boolean zu konvertieren:
query GetPost {
post(by: { id: 1 }) {
# Select field type - Whether a single or multiple values, we always use `metaValue`
select: metaValue(key: "select_field")
multiSelect: metaValue(key: "multi_select_field")
# Checkbox field type
checkbox: metaValue(key: "checkbox_field")
# Radio button field type
radioButton: metaValue(key: "radio_button_field")
# Button group field type
buttonGroup: metaValue(key: "button_group_field")
# True/False field type
trueFalseAsString: metaValue(key: "true_false_field")
trueFalse: _equals(value1: $__trueFalseAsString, value2: "1")
}
}Relationale Feldtypen abfragen
Ist das benutzerdefinierte Feld eine Beziehung (z. B. ein Beitrag, ein Benutzer, eine Taxonomie usw.), können wir die IDs aus den Meta-Feldern exportieren und anschlieĂend diese EntitĂ€ten (vom Typ Post, User, Taxonomy usw.) in einer nachfolgenden Query abfragen.
Andernfalls handelt es sich um einen einfachen Feldtyp, der direkt ĂŒber metaValue abgefragt werden kann:
query GetPostDataAndExportRelationships {
post(by: { id: 1 }) {
link: metaValue(key: "link_field")
# Post Object field type
post_object: metaValue(key: "post_object_field")
@export(as: "post_object_id")
# Multiple Post Object field type
post_objects: metaValue(key: "post_objects_field")
@export(as: "post_object_ids")
# Page Link field type
page_link: metaValue(key: "page_link_field")
@export(as: "page_link_id")
# Multiple Page Link field type
page_links: metaValue(key: "page_links_field")
@export(as: "page_link_ids")
# Relationship field type
relationships: metaValue(key: "relationship_field")
@export(as: "relationship_ids")
# Taxonomy field type
categoryTaxonomy: metaValue(key: "category_taxonomy_field")
@export(as: "category_taxonomy_ids")
tagTaxonomy: metaValue(key: "tag_taxonomy_field")
@export(as: "tag_taxonomy_ids")
# User field type
user: metaValue(key: "user_field")
@export(as: "user_id")
# Multiple User field type
users: metaValue(key: "users_field")
@export(as: "user_ids")
}
}
query QueryPostRelationships
@depends(on: "GetPostDataAndExportRelationships")
{
# Query the post
postObject: customPost(by: { id: $post_object_id }, status: any) {
id
title
}
# Query the list of posts
postObjects: customPosts(filter: { ids: $post_object_ids, status: any }, pagination: { limit: -1 }) {
id
title
}
# Query the page
pageLink: page(by: { id: $page_link_id }, status: any) {
id
title
}
# Query the list of pages
pageLinks: pages(filter: { ids: $page_link_ids, status: any }, pagination: { limit: -1 }) {
id
title
}
# Query the relationship post
relationships: customPosts(filter: { ids: $relationship_ids, status: any }, pagination: { limit: -1 }) {
id
title
}
# Query the list of categories
categoryTaxonomy: categories(filter: { ids: $category_taxonomy_ids }, taxonomy: "category") {
id
name
}
# Query the list of tags
tagTaxonomy: tags(filter: { ids: $tag_taxonomy_ids }, taxonomy: "post_tag") {
id
name
}
# Query the user
user: user(by: { id: $user_id }) {
id
name
}
# Query the list of users
users: users(filter: { ids: $user_ids }, pagination: { limit: -1 }) {
id
name
}
}Datum-Feldtypen abfragen
Da ein Datum als String im Format "YMD" (z. B. "20240320") gespeichert wird, muss es zunÀchst in einen Timestamp umgewandelt und dann in die Funktion _date eingesetzt werden.
query GetPost {
post(by: { id: 1 }) {
# Date Picker field
dateAsString: metaValue(key: "date_picker_field")
dateYear: _strSubstr(string: $__dateAsString, offset: 0, length: 4)
dateMonth: _strSubstr(string: $__dateAsString, offset: 4, length: 2)
dateDay: _strSubstr(string: $__dateAsString, offset: 6, length: 2)
dateAsTimestamp: _makeTime(year: $__dateYear, month: $__dateMonth, day: $__dateDay, hour: 0, minute: 0, second: 0)
date: _date(format: "Y-m-d", timestamp: $__dateAsTimestamp)
# Date Time Picker field
dateTime: metaValue(key: "date_time_picker_field")
# Time Picker field
timeAsString: metaValue(key: "time_picker_field")
timeHours: _strSubstr(string: $__timeAsString, offset: 0, length: 2)
timeMinutes: _strSubstr(string: $__timeAsString, offset: 3, length: 2)
timeSeconds: _strSubstr(string: $__timeAsString, offset: 6, length: 2)
googleMap: metaValue(key: "google_map_field")
colorPicker: metaValue(key: "color_picker_field")
}
}Beliebige Feldtypen mutieren
Wir verwenden Meta-Felder, um ACF-benutzerdefinierte Felder hinzuzufĂŒgen, zu aktualisieren und zu löschen.
Diese Query aktualisiert mehrere ACF-benutzerdefinierte Felder, indem ein einzelnes JSON-Objekt an die Mutation updatePost ĂŒbergeben wird.
(Beachte, dass das JSON Arrays von Werten enthÀlt, auch wenn es sich um einen einzelnen Wert handelt.)
mutation UpdatePost($postId: ID!) {
updatePost(
input: {
id: $postId
meta: {
text_field: ["New text value"],
textarea_field: ["New textarea value"],
select_field: ["New select value"],
multi_select_field: ["Choice 1", "Choice 2"],
number_field: [42],
date_picker_field: ["20240320"],
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
text: metaValue(key: "text_field")
textarea: metaValue(key: "textarea_field")
select: metaValue(key: "select_field")
multiSelect: metaValues(key: "multi_select_field")
number: metaValue(key: "number_field")
date: metaValue(key: "date_picker_field")
}
}
}Diese Query aktualisiert ACF-benutzerdefinierte Felder in groĂem Umfang mithilfe der Mutation updateCustomPostMeta:
mutation UpdatePost($postId: ID!) {
updateCustomPostMetas(inputs: [
{ id: $postId, key: "text_field", value: "New text value" },
{ id: $postId, key: "textarea_field", value: "New textarea value" },
{ id: $postId, key: "select_field", value: "New select value" },
{ id: $postId, key: "multi_select_field", value: ["Choice 1", "Choice 2"] },
{ id: $postId, key: "number_field", value: 42 },
{ id: $postId, key: "date_picker_field", value: "20240320" },
]) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
__typename
id
text: metaValue(key: "text_field")
textarea: metaValue(key: "textarea_field")
select: metaValue(key: "select_field")
multiSelect: metaValues(key: "multi_select_field")
number: metaValue(key: "number_field")
date: metaValue(key: "date_picker_field")
}
}
}