הגדרת Metafields של Shopify לשדות מותאמים אישית
תארו לעצמכם שהוספתם מאפייני מוצר — זמן אספקה, אחריות, משקל נטו. אבל בכרטיס המוצר הסטנדרטי של Shopify, אין מקום לנקודות נתונים אלה. ללא Metafields, הייתם צריכים לכתוב הכל בתיאור כשורה אחת, ולשבור את המבנה. נתקלנו במצב הזה עשרות פעמים ואנחנו יודעים לפתור אותו כראוי. בממוצע בפרויקטים שלנו, metafields מוגדרים כראוי מקצרים את זמן עדכון הקטלוג ב-40% ומעלים את שיעור ההמרה ב-15–20%. זה לא רק נוחות — זה גידול בהכנסות ללא השקעה נוספת.
Metafields הם מנגנון מובנה להרחבת מודל הנתונים הסטנדרטי של Shopify. אפשר להוסיף שדות שרירותיים למוצרים, וריאנטים, קולקציות, לקוחות, הזמנות, עמודים, בלוגים ולחנות עצמה. אין צורך באפליקציה מותאמת אישית — רק קונפיגורציה.
מושג ה-Namespace וה-Key
כל metafield מזוהה על ידי זוג namespace.key. Namespace הוא קבוצה לוגית (בדרך כלל שם האפליקציה או תחום הנתונים), ו-key הוא השדה הספציפי. דוגמאות:
-
custom.delivery_days— זמן אספקה -
specifications.weight_net— משקל נטו -
seo.canonical_override— עקיפות SEO -
loyalty.points_multiplier— מכפיל נקודות נאמנות
ה-namespaces הסטנדרטיים של Shopify: descriptors (לתיאורים בסיסיים), facts (נתונים עובדתיים). בחירת namespace נכון מפשטת את התחזוקה ומונעת התנגשויות עם אפליקציות אחרות.
סוגי נתונים של Metafields
| סוג | מקרי שימוש |
|---|---|
single_line_text_field |
SKU של ספק, מותג, צבע |
multi_line_text_field |
מפרטים מורחבים |
rich_text_field |
תוכן מעוצב עם HTML |
number_integer |
כמות, גיל, שנה |
number_decimal |
משקל, נפח, מקדם |
boolean |
דגלים: רב מכר, חדש, בלעדי |
date |
תאריך ייצור, תאריך תפוגה |
date_time |
חותמת זמן מדויקת לאירוע |
url |
קישור למסמך, סקירת וידאו |
json |
נתונים מובנים (מערך של מפרטים) |
color |
צבע ב-HEX (#RRGGBB) |
weight |
משקל עם יחידה |
volume |
נפח עם יחידה |
dimension |
מימד עם יחידה |
rating |
דירוג עם טווח (מינימום/מקסימום) |
file_reference |
הפניה לקובץ בספריית המדיה |
product_reference |
הפניה למוצר אחר |
collection_reference |
הפניה לקולקציה |
variant_reference |
הפניה לווריאנט |
page_reference |
הפניה לעמוד |
mixed_reference |
הפניה לכל משאב |
list.product_reference |
רשימת מוצרים קשורים |
list.file_reference |
גלריית קבצים |
סוגים *_reference ו-file_reference יכולים להיות מוגדרים כרשימות (list.*) כדי לאחסן ערכים מרובים.
יצירת הגדרת Metafield דרך Admin
עברו אל Admin > Settings > Custom data. בחרו את סוג המשאב (לדוגמה, Product), לחצו על "הוסף הגדרה". הזינו את השם, ה-namespace, ה-key וסוג הנתונים. הגדרה קובעת את הסוג והופכת את השדה לגלוי בכרטיסי המוצר ב-Admin. ללא הגדרה, ניתן ליצור metafield דרך API אבל הוא לא יופיע בממשק ה-Admin ולא יהיה נגיש דרך Liquid (רק דרך Storefront API).
- היכנסו לפאנל הניהול של Shopify.
- עברו אל "הגדרות > נתונים מותאמים אישית".
- בחרו את סוג המשאב (Product, Collection, Page וכו').
- לחצו על "הוסף הגדרה".
- מלאו את השם, ה-namespace, ה-key וסוג הנתונים.
- אופציונלי: הגדירו ולידציה (לדוגמה, מינימום/מקסימום למספרים).
- שמרו את ההגדרה.
יצירה דרך 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 // Показывать вверху в карточке товара
}
}
}
});
מילוי המוני של Metafields
דרך 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"
}
]
}
}
});
הצגת Metafields בערכת נושא Liquid
הגדרות Metafield שנוצרו דרך Admin נגישות ישירות ב-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 }} {{ delivery.value | pluralize: 'день', 'дня', 'дней' }}</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 -%} Metafields דרך 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
}
}
}
}
}
}
`; למה Metaobjects עדיפים למבנים מורכבים?
Metaobjects הם אלטרנטיבה חזקה יותר. הם סוגי תוכן מותאמים אישית עם שדות משלהם, שניתן להפנות אליהם ב-metafields של מוצרים. לדוגמה, צרו סוג // Создание 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 // Показывать вверху в карточке товара } } } }); עם שדות // Установка метаполей для продукта 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" } ] } } }); , {%- 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 }} {{ delivery.value | pluralize: 'день', 'дня', 'дней' }}</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 -%} , // 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 } } } } } } `; , Brand. לאחר מכן, במוצר, השתמשו ב-metafield מסוג name שמצביע על מופע של Brand.
| השוואה | Metafields | Metaobjects |
|---|---|---|
| מורכבות | שדות פשוטים | אובייקטים מובנים |
| שימוש חוזר | לא | כן (אובייקט אחד למוצרים רבים) |
| ניהול | ידני לכל שדה | דרך עורך Metaobject |
| גישה ב-Liquid | logo |
country |
{%- 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 -%} מה כלול בעבודה
אנחנו מגדירים Metafields במפתח מלא: מנתחים צרכים, מתכננים מבני namespace וסוגים, יוצרים הגדרות דרך Admin או API, מפתחים סקריפטים למילוי המוני, ומתאימים אישית את ערכת הנושא של Liquid לתצוגה. תוצרים: תיעוד סכמה, הדרכת צוות על שדות מותאמים אישית, וחודש תמיכה.
הערכות זמנים
- הגדרת 10–20 הגדרות metafield עם פלט בערכת נושא: 1–2 ימים.
- מילוי המוני של metafields לקטלוג (1000–10000 מוצרים): 1–3 ימים, כולל יצירת סקריפט מיפוי והרצתו.
- פיתוח מבני Metaobject לקטלוגים מורכבים (מותגים, חומרים, תעודות): 3–5 ימים.
העלות מחושבת באופן אישי לפי נפח הנתונים ומורכבות האינטגרציה. צרו קשר לייעוץ — נבחן את הפרויקט שלכם בתוך יום עסקים אחד. יש לנו ניסיון של 10+ שנים עם Shopify והשלמנו 50+ פרויקטי התאמה אישית. אנחנו מבטיחים שכל ה-metafields יוצגו כראוי בחנות ויעמדו בדרישות Core Web Vitals.







