# metafieldsSet ile metafield yazma

> Herhangi bir kayıtta en fazla 25 metafield’ı tek ve atomik bir çağrıyla oluşturun ya da güncelleyin; compareDigest ile yeni değerlerin üzerine yazmayın.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/metafieldsset-ile-metafield-yazma

## Kısaca

Metafield yazmak için metafieldsSet mutation’ını ownerId, namespace, key, type ve value içeren bir girdi listesiyle çağırın. Metafield yoksa oluşturur, varsa günceller. Tek çağrı, farklı sahiplere ait en fazla 25 metafield alır ve atomiktir: biri başarısız olursa hiçbiri kaydedilmez. Kayıtlı değer siz okuduktan sonra değişmediyse güncellemek için compareDigest gönderin.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlem:** metafieldsSet
- **Erişim yetkisi:** Metafield’ın bağlı olduğu kayıt için yazma yetkisi (ürünler, müşteriler vb.)
- **Yerini aldığı REST çağrısı:** POST /admin/api/products/{id}/metafields.json ve PUT /admin/api/metafields/{id}.json
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. Her değer için bir girdi hazırlayın: ownerId (metafield taşıyabilen herhangi bir kayıt), namespace, key, type ve value. Değer JSON, sayı ya da liste olsa da her zaman metin (string) olarak gönderilir.
2. Bu namespace ve key için bir metafield tanımı varsa type’ı atlayabilirsiniz; yoksa zorunludur.
3. SetProductMetafields’ı gönderin ve userErrors’ı kontrol edin; boş değilse hiçbir şey kaydedilmemiştir.
4. Güvenli güncelleme için önce compareDigest’i okuyup geri gönderin. compareDigest: null, yalnızca metafield henüz yoksa yazar.

## Kod

### metafields-set.graphql

```graphql
mutation SetProductMetafields($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      id
      namespace
      key
      type
      value
      compareDigest
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### metafields-set.variables.json

```json
{
  "metafields": [
    {
      "ownerId": "gid://shopify/Product/1234567890",
      "namespace": "custom",
      "key": "material",
      "type": "single_line_text_field",
      "value": "100% linen"
    },
    {
      "ownerId": "gid://shopify/Product/1234567890",
      "namespace": "custom",
      "key": "care_guide",
      "type": "multi_line_text_field",
      "value": "Wash at 30°C.\nDo not tumble dry.",
      "compareDigest": null
    }
  ]
}
```

### metafields-set.response.json

```json
{
  "data": {
    "metafieldsSet": {
      "metafields": [
        {
          "id": "gid://shopify/Metafield/1111111111",
          "namespace": "custom",
          "key": "material",
          "type": "single_line_text_field",
          "value": "100% linen",
          "compareDigest": "<digest from the response>"
        },
        {
          "id": "gid://shopify/Metafield/1111111112",
          "namespace": "custom",
          "key": "care_guide",
          "type": "multi_line_text_field",
          "value": "Wash at 30°C.\nDo not tumble dry.",
          "compareDigest": "<digest from the response>"
        }
      ],
      "userErrors": []
    }
  }
}
```

## Sınırlar ve özel durumlar

- Çağrı başına en fazla 25 metafield ve 10 MB istek boyutu.
- namespace’i boş bırakırsanız custom değil, uygulamanıza ayrılmış namespace kullanılır.
- Değerler tipe uymalıdır: liste tipleri metin içinde bir JSON dizisi, referanslar GID bekler; biri ayrıştırılamazsa istek başarısız olur.
- Bir metafield’ı silmek için metafieldsDelete mutation’ını kullanın.

## Sorular

### Bir ürün metafield’ını GraphQL ile nasıl güncellerim?

metafieldsSet’i ürünün GID’si ownerId olacak şekilde namespace, key, type ve yeni değerle çağırın. Mevcut metafield yerinde güncellenir.

### Tek çağrıda farklı ürünlere metafield yazabilir miyim?

Evet. Her girdinin kendi ownerId’si vardır; tek çağrıyla birçok kayda toplam 25 metafield yazabilirsiniz.

### compareDigest ne işe yarar?

Siz okuduktan sonra başkasının değiştirdiği bir değerin üzerine yazmanızı engeller. Kayıtlı değer digest ile artık eşleşmiyorsa mutation kaydetmek yerine hata döner.

## Shopify belgeleri

- [metafieldsSet](https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldsSet)
- [Metafield data types](https://shopify.dev/docs/apps/build/custom-data/metafields/list-of-data-types)

## İlgili içerikler

- [Metafield tanımı oluşturma](https://lintelagency.com/tr/kaynaklar/graphql/metafield-tanimi-olusturma)
- [Storefront API ile metafield ve metaobject okuma](https://lintelagency.com/tr/kaynaklar/graphql/storefront-metafield-ve-metaobject-okuma)
- [Function’ları metafield (meta alan) ile yapılandırmak: kuralı yeni sürüm yayınlamadan değiştirin](https://lintelagency.com/tr/blog/shopify-functions-metafield-ile-yapilandirma)

Lisans: MIT. Kendi mağazanızda da müşteri işlerinizde de ücretsiz kullanabilirsiniz.
