Advanced Custom Fields (ACF)
Mithilfe der Meta-Felder in Kombination mit den Funktionen der PRO-Erweiterungen können wir benutzerdefinierte Felder des Plugins Advanced Custom Fields (ACF) abrufen und verändern.
Hier sind einige queries, die zeigen, wie du benutzerdefinierte Felder für alle von ACF unterstützten Feldtypen abrufst und veränderst:

Grundlegende Feldtypen abfragen
Die grundlegenden Feldtypen von ACF können direkt abgefragt werden, indem du das Feld metaValue verwendest:
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
Wenn das benutzerdefinierte Feld eine Beziehung ist (z. B. ein Bild oder eine Datei), können wir die IDs aus den Meta-Feldern exportieren und anschließend sofort jene Entitäten (vom Typ Media) in einer nachfolgenden query abfragen.
Andernfalls handelt es sich um einen einfachen Feldtyp, den wir direkt mit metaValue abfragen können:
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 ein einfacher Feldtyp mit metaValue abgefragt werden.
ACF speichert Arrays von Werten in einem einzigen Eintrag, kodiert als JSON-String; daher mĂĽssen wir das Feld metaValue (anstatt metaValues) verwenden, um das Array abzurufen.
FĂĽr boolesche Werte verwenden wir das Feld _equals, um es von String in Boolean umzuwandeln:
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
Wenn das benutzerdefinierte Feld eine Beziehung ist (z. B. ein Post, ein Benutzer, eine Taxonomie usw.), können wir die IDs aus den Meta-Feldern exportieren und anschließend sofort jene Entitäten (vom Typ Post, User, Taxonomy usw.) in einer nachfolgenden query abfragen.
Andernfalls handelt es sich um einen einfachen Feldtyp, den wir direkt mit metaValue abfragen können:
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
}
}Wir können auch alle Beziehungen für mehrere Posts abfragen und dabei jede nur einmal abrufen (auch wenn sie zwischen Posts geteilt werden):
query GetPostDataAndExportRelationships
@configureWarningsOnExportingDuplicateVariable(enabled: false)
{
# Multiple posts
posts {
# Post Object field type
post_object: metaValue(key: "post_object_field")
@export(
as: "post_object_id_list",
type: LIST
)
# Multiple Post Object field type
post_objects: metaValue(key: "post_objects_field")
@export(
as: "post_object_ids_list"
type: LIST
)
}
}
query TransformRelationships
@depends(on: "GetPostDataAndExportRelationships")
{
flattenedPostObjectIdsList: _arrayFlatten(array: $post_object_ids_list)
@arrayUnique
@export(as: "post_object_ids_list")
}
query QueryPostRelationships
@depends(on: "TransformRelationships")
{
# Query the post
postObjectList: customPosts(filter: { ids: $post_object_id_list, status: any }, pagination: { limit: -1 }) {
id
title
}
# Query the list of posts
postObjectsList: customPosts(filter: { ids: $post_object_ids_list, status: any }, pagination: { limit: -1 }) {
id
title
}
}Datums-Feldtypen abfragen
Da ein Datum als String im Format "YMD" gespeichert wird (z. B. "20240320"), mĂĽssen wir es in einen Timestamp umwandeln und diesen dann in die Funktion _date einfĂĽgen.
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 verändern
Wir verwenden Meta-Felder auch zum Verändern von ACF-Felddaten (Hinzufügen, Aktualisieren und Löschen von Einträgen).
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 einem Schritt, indem die Mutation updateCustomPostMeta verwendet wird:
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")
}
}
}