# Metafield tanımı oluşturma

> metafieldDefinitionCreate ile tipli ve doğrulamalı bir metafield tanımı oluşturun, admin’de sabitleyin ve Storefront API’ye açın.

Sayfa: https://lintelagency.com/tr/kaynaklar/graphql/metafield-tanimi-olusturma

## Kısaca

Bir metafield tanımı oluşturmak için metafieldDefinitionCreate’i name, namespace, key, ownerType ve type ile, isteğe bağlı olarak validations, access ve pin ile çağırın. Tanım, metafield’a sabit bir tip, Shopify admin’de bir düzenleme alanı ve izin verilen değerler listesi gibi kurallar kazandırır. Headless bir mağaza bu değeri Storefront API ile okuyacaksa access.storefront’u PUBLIC_READ yapın.

## Bilgiler

- **API:** Admin GraphQL API
- **İşlem:** metafieldDefinitionCreate
- **Yerini aldığı REST çağrısı:** Yok; tanımlar yalnızca GraphQL ile yönetilir
- **API sürümü:** 2026-10
- **Son kontrol:** 2 Kasım 2026

## Nasıl kullanılır

1. Sahip tipini (burada PRODUCT), bir namespace ve key’i, Shopify’ın metafield tiplerinden birini seçin.
2. Gerekiyorsa doğrulama ekleyin; örneğin sabit bir değer listesi için choices. Doğrulama değerleri metindir, bu yüzden liste metin içinde bir JSON dizisi olarak yazılır.
3. Headless bir mağaza değeri okuyacaksa access.storefront’u PUBLIC_READ, admin’de ürün sayfasında göstermek için pin: true yapın.
4. CreateFabricDefinition’ı gönderin ve userErrors’ı kontrol edin; TAKEN, bu namespace ve key ile bir tanımın zaten olduğu anlamına gelir.

## Kod

### metafield-definition-create.graphql

```graphql
mutation CreateFabricDefinition($definition: MetafieldDefinitionInput!) {
  metafieldDefinitionCreate(definition: $definition) {
    createdDefinition {
      id
      namespace
      key
      name
      ownerType
      type {
        name
      }
      validations {
        name
        value
      }
      access {
        storefront
      }
    }
    userErrors {
      code
      field
      message
    }
  }
}
```

### metafield-definition-create.variables.json

```json
{
  "definition": {
    "name": "Fabric",
    "namespace": "custom",
    "key": "fabric",
    "description": "Main fabric, shown on the product page and used as a filter.",
    "ownerType": "PRODUCT",
    "type": "single_line_text_field",
    "validations": [
      {
        "name": "choices",
        "value": "[\"Cotton\",\"Linen\",\"Wool\"]"
      }
    ],
    "access": {
      "storefront": "PUBLIC_READ"
    },
    "pin": true
  }
}
```

### metafield-definition-create.response.json

```json
{
  "data": {
    "metafieldDefinitionCreate": {
      "createdDefinition": {
        "id": "gid://shopify/MetafieldDefinition/1234567890",
        "namespace": "custom",
        "key": "fabric",
        "name": "Fabric",
        "ownerType": "PRODUCT",
        "type": {
          "name": "single_line_text_field"
        },
        "validations": [
          {
            "name": "choices",
            "value": "[\"Cotton\",\"Linen\",\"Wool\"]"
          }
        ],
        "access": {
          "storefront": "PUBLIC_READ"
        }
      },
      "userErrors": []
    }
  }
}
```

## Sınırlar ve özel durumlar

- Aynı sahip tipi, namespace ve key’e sahip mevcut metafield’lar yeni tanıma göre kontrol edilir. Geçerli olanlar tanımın tipini alır; geçersiz olanlar değerini korur ama bir sonraki kayıtta tanıma uymak zorundadır.
- namespace’i boş bırakırsanız uygulamanıza ayrılmış namespace kullanılır; bu namespace’teki tanımlar uygulamanıza aittir.
- Bir tanımın tipi sonradan değiştirilemez; tip yanlışsa yeni bir key oluşturun.
- Sahip tipi başına sabitlenebilecek tanım sayısı sınırlıdır; userErrors’ta PINNED_LIMIT_REACHED görürseniz bu sınıra ulaşmışsınızdır.

## Sorular

### Metafield ile metafield tanımı arasındaki fark nedir?

Metafield tek bir kayıttaki değerdir. Tanım ise o tipteki tüm kayıtlar için namespace ve key’i tarif eder: tipini, doğrulamasını, admin’deki düzenleme alanını ve API erişimini.

### Metafield’ımı neden Storefront API ile okuyamıyorum?

Tanımında storefront erişiminin PUBLIC_READ olması gerekir. NONE ise Storefront API değeri okuyamaz.

### Bir metafield’ı belirli değerlerle sınırlayabilir miyim?

Evet. İzin verilen değerleri içeren bir JSON dizisiyle choices doğrulaması ekleyin; admin açılır liste gösterir, API de diğer değerleri reddeder.

## Shopify belgeleri

- [metafieldDefinitionCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/metafieldDefinitionCreate)
- [Metafield definitions](https://shopify.dev/docs/apps/build/custom-data/metafields/definitions)

## İlgili içerikler

- [metafieldsSet ile metafield yazma](https://lintelagency.com/tr/kaynaklar/graphql/metafieldsset-ile-metafield-yazma)
- [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.
