Налаштування Shopify Metafields для кастомних полів

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Shopify Metafields для кастомних полів
Проста
від 1 робочого дня до 3 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування Shopify Metafields для користувацьких полів

Metafields — механізм розширення стандартної моделі даних Shopify довільними полями без розробки додатку. Доступні для продуктів, варіантів, колекцій, клієнтів, замовлень, сторінок, блогів та магазину в цілому.

Концепція namespace та key

Кожне метаполе ідентифікується парою namespace.key. Namespace — логічна група (зазвичай ім'я додатку або домен даних), key — конкретне поле:

  • custom.delivery_days — користувацьке поле «Термін доставки»
  • specifications.weight_net — характеристики, вага нетто
  • seo.canonical_override — SEO-overrode
  • loyalty.points_multiplier — поля програми лояльності

Стандартні namespace'и Shopify: descriptors (для базових описів), facts (фактичні дані).

Типи даних metafields

Тип Приклади використання
single_line_text_field Артикул поставщика, бренд, колір
multi_line_text_field Розширені характеристики
rich_text_field Форматований контент з HTML
number_integer Кількість, вік, рік
number_decimal Вага, обсяг, коефіцієнт
boolean Ознаки: хіт, новинка, ексклюзив
date Дата виробництва, термін дії
date_time Точний timestamp події
url Посилання на документ, відео-огляд
json Структуровані дані (масив характеристик)
color Колір у HEX (#RRGGBB)
weight Вага з одиницею виміру
volume Обсяг з одиницею
dimension Розмір з одиницею
rating Рейтинг з діапазоном (min/max)
file_reference Посилання на файл у медіа-бібліотеці
product_reference Посилання на інший продукт
collection_reference Посилання на колекцію
variant_reference Посилання на варіант
page_reference Посилання на сторінку
mixed_reference Посилання на будь-який ресурс

Типи *_reference та file_reference можна оголосити списком (list.*) для зберігання масиву значень.

Створення metafield definitions через Admin

Admin > Settings > Custom data — інтерфейс для створення визначень метаполів. Визначення фіксує тип даних та робить поле доступним у карточках товарів/колекцій в Admin.

Без definition метаполе можна створити через API, але воно не буде відображатися в Admin UI та не буде доступне через Liquid (тільки через Storefront API).

Створення через GraphQL Admin API

// Створення metafield definition
const CREATE_DEFINITION = `
  mutation metafieldDefinitionCreate($definition: MetafieldDefinitionInput!) {
    metafieldDefinitionCreate(definition: $definition) {
      createdDefinition {
        id
        name
        namespace
        key
        type { name }
      }
      userErrors { field message }
    }
  }
`;

await client.query({
  data: {
    query: CREATE_DEFINITION,
    variables: {
      definition: {
        name: "Термін доставки (днів)",
        namespace: "custom",
        key: "delivery_days",
        type: "number_integer",
        ownerType: "PRODUCT",
        validations: [
          { name: "min", value: "1" },
          { name: "max", value: "90" }
        ],
        pin: true  // Показувати в верхній частині карточки товару
      }
    }
  }
});

Масове заповнення метаполів

Через Admin API для існуючих продуктів:

// Установлення метаполів для продукту
const SET_METAFIELDS = `
  mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
    metafieldsSet(metafields: $metafields) {
      metafields { id key namespace value }
      userErrors { field message }
    }
  }
`;

await client.query({
  data: {
    query: SET_METAFIELDS,
    variables: {
      metafields: [
        {
          ownerId: "gid://shopify/Product/123456789",
          namespace: "custom",
          key: "delivery_days",
          type: "number_integer",
          value: "3"
        },
        {
          ownerId: "gid://shopify/Product/123456789",
          namespace: "specifications",
          key: "warranty_years",
          type: "number_integer",
          value: "2"
        }
      ]
    }
  }
});

При масовому імпорті — пакетувати по 25 метаполів на запит (лімітЗ API).

Вивід метаполів у Liquid-темі

Визначені через Admin metafield definitions доступні в Liquid безпосередньо:

{%- comment -%} sections/product-specs.liquid {%- endcomment -%}

{%- assign delivery = product.metafields.custom.delivery_days -%}
{%- assign warranty = product.metafields.specifications.warranty_years -%}
{%- assign related = product.metafields.custom.related_products.value -%}

<div class="product-specs">
  {%- if delivery != blank -%}
    <div class="spec-row">
      <span class="spec-label">Термін доставки:</span>
      <span class="spec-value">{{ delivery.value }} днів</span>
    </div>
  {%- endif -%}

  {%- if warranty != blank -%}
    <div class="spec-row">
      <span class="spec-label">Гарантія:</span>
      <span class="spec-value">{{ warranty.value }} років</span>
    </div>
  {%- endif -%}
</div>

{%- comment -%} Список пов'язаних продуктів (list.product_reference) {%- endcomment -%}
{%- if related != blank -%}
  <div class="related-products">
    <h3>Також підходить:</h3>
    {%- for related_product in related -%}
      <a href="{{ related_product.url }}">{{ related_product.title }}</a>
    {%- endfor -%}
  </div>
{%- endif -%}

Для метаполів типу rich_text_field — вивід через metafield.value:

{%- assign rich = product.metafields.custom.extended_description -%}
{%- if rich != blank -%}
  <div class="product-extended">
    {{ rich.value }}
  </div>
{%- endif -%}

Метаполя через Storefront API (для headless)

// GraphQL Storefront API
const PRODUCT_WITH_METAFIELDS = `
  query productByHandle($handle: String!) {
    product(handle: $handle) {
      title
      metafield(namespace: "custom", key: "delivery_days") {
        value
        type
      }
      variants(first: 10) {
        edges {
          node {
            metafield(namespace: "specifications", key: "color_hex") {
              value
            }
          }
        }
      }
    }
  }
`;

За замовчуванням metafields не повертаються в Storefront API — потрібно явно вказати namespace та key або налаштувати Storefront API permissions в Admin.

Метаоб'єкти (Metaobjects)

Більш потужна альтернатива — Metaobjects. Це користувацькі типи контенту (наче CMS-типи) зі своїми полями, які можна ссилочно використовувати в метаполях продуктів.

Приклад: створити тип Brand з полями name, logo, country, description, затим у продукті використовувати метаполе типу metaobject_reference що вказує на екземпляр Brand.

{%- assign brand = product.metafields.custom.brand.value -%}
{%- if brand -%}
  <div class="brand-block">
    <img src="{{ brand.fields.logo.value | image_url: width: 120 }}" alt="{{ brand.fields.name.value }}">
    <span>{{ brand.fields.name.value }}</span>
    <span>{{ brand.fields.country.value }}</span>
  </div>
{%- endif -%}

Терміни

Налаштування 10–20 metafield definitions з виводом у темі: 1–2 дні. Масове заповнення метаполів для існуючого каталогу (1000–10000 товарів): 1–3 дні включаючи написання скрипту та прогон. Розробка структури на Metaobjects для складного каталогу (бренди, матеріали, сертифікати): 3–5 днів.