## Ek Eklenti ve Ürün Seçeneklerini Barkod Çıktısına Yansıtma

Mağazanızda ürün ek seçenekleri (Product Add-Ons, Extra Product Options), kişiselleştirme, hediye paketi, işleme/gravür gibi alanlar sunan bir eklenti kullanıyorsanız; müşterinin seçtiği bu değerler WooCommerce tarafında sipariş satırı meta verisinde saklanır ve varsayılan olarak Kargo Entegratör'e iletilmez.

Bu değerleri paketleme sırasında görebilmek için, ürün satırındaki `custom_attributes` alanına aktarabilirsiniz. Bu alana eklediğiniz **anahtar / değer** çiftleri, gönderiye ait barkod ve fiş PDF çıktılarında ilgili ürün satırının altında listelenir.

### Barkod Çıktısına İletilen Veri Yapısı

Her ürün satırı (`lines`) aşağıdaki gibi serbest bir `custom_attributes` nesnesi kabul eder:

```
"lines": [
  {
    "title": "Deri Çanta",
    "quantity": 3,
    "platform_id": 1235,
    "img": "https://dericanta.com/assets/ornek.png",
    "sku": "DRCNT123",
    "custom_attributes": {
      "Renk": "Kırmızı",
      "Boyut": "160 cm"
    }
  }
]
```

Anahtar isimleri sabit değildir; çıktıda görünmesini istediğiniz etiketi doğrudan siz belirlersiniz. Değerlerin kısa metinler olmasına dikkat edin, uzun metinler barkod çıktısında kırpılabilir.

### Ek Seçenek Eklentilerinin Verisini Toplu Aktarma

Ek seçenek eklentilerinin büyük bölümü, müşterinin seçimlerini sipariş satırı meta verisi olarak kaydeder ve bu veriler sipariş detay ekranında ürün adının altında görüntülenir. Aşağıdaki örnek, sipariş ekranında görünen tüm bu satırları olduğu gibi barkod çıktısına taşır:

```
add_filter('gcargo_shipment_map_wc_order_request', function ($gcargo_request, $order) {

    $gcargo_request['lines'] = array_map(function ($line) use ($order) {

        // platform_id -> WooCommerce sipariş satırı (order item) ID'si
        $item = $order->get_item($line['platform_id']);

        if (!$item) {
            return $line;
        }

        // Sipariş ekranında görünen tüm seçenek satırları (varyasyon + ek seçenekler)
        foreach ($item->get_formatted_meta_data('_') as $meta) {
            $baslik = wp_strip_all_tags($meta->display_key);
            $deger  = wp_strip_all_tags($meta->display_value);

            if (!empty($baslik) && !empty($deger)) {
                $line['custom_attributes'][$baslik] = $deger;
            }
        }

        return $line;
    }, $gcargo_request['lines']);

    return $gcargo_request;
}, 10, 2);
```

### Notlar

* Yalnızca belirli bir alanı aktarmak isterseniz, meta anahtarını `wc_get_order_item_meta($line['platform_id'], '_meta_anahtari', true)` ile doğrudan okuyup `custom_attributes` içine ekleyebilirsiniz.

* İade gönderilerinde aynı yapıyı `gcargo_returned_map_wc_order_request` filtresi ile kullanabilirsiniz.

* `custom_attributes` zorunlu bir alan değildir; gönderilmediğinde barkod çıktısında ek satır oluşmaz.


