Запрос данных плагинов
Запрос данных плагиновAdvanced Custom Fields (ACF)

Advanced Custom Fields (ACF)

Подробнее в руководстве Работа с Advanced Custom Fields (ACF).

Примеры queries для взаимодействия с данными плагина Advanced Custom Fields (ACF).

Получение пользовательских полей ACF

Мы можем использовать мета-поля для запроса данных пользовательских полей ACF, независимо от их типа:

query GetPost($postId: ID!) {
  post(by: { id: $postId }) {
    id
    title
 
    # Базовые типы полей
    text: metaValue(key: "text_field")
    textarea: metaValue(key: "textarea_field")
    select: metaValue(key: "select_field")
    multiSelect: metaValue(key: "multi_select_field")
    number: metaValue(key: "number_field")
 
    # Поле даты
    dateAsString: metaValue(key: "date_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)
    dateTime: _makeTime(year: $__dateYear, month: $__dateMonth, day: $__dateDay, hour: 0, minute: 0, second: 0)
    date: _date(format: "Y-m-d", timestamp: $__dateTime)
  }
}

Если мета-значение является связью (например: запись, пользователь, таксономия и т.д.), мы можем использовать это значение для запроса соответствующей сущности типа Post, User, Taxonomy и т.д.:

query GetPostWithRelationships($postId: ID!) {
  post(by: { id: $postId }) {
    id
    title
    
    # Экспорт связи с записью
    relationshipPostId: metaValue(key: "relationship_post_id")
      @export(as: "relationshipPostId")
 
    # Экспорт связи со списком записей
    relationshipPostIds: metaValue(key: "relationship_post_ids")
      @export(as: "relationshipPostIds")
  }
}
 
query QueryPostRelationships @depends(on: "GetPostWithRelationships") {  
  # Запрос связи с записью
  relationshipPost: post(by: { id: $relationshipPostId }) {
    id
    title
  }
 
  # Запрос связи со списком записей
  relationshipPosts: posts(filter: { ids: $relationshipPostIds }) {
    id
    title
  }
}

Обновление пользовательских полей ACF

Мы можем использовать мета-мутации для обновления данных пользовательских полей ACF, передавая имена полей и значения, независимо от их типа:

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_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_field")
    }
  }
}