Liquid, JavaScript, Themes
Hallo zusammen,
Ich nutze Shopify Flow, um das Ausfüllen von einigen metafeldern zu automatisieren. Diese Werte werden letztendlich für Filter im Shop verwendet.
Mein aktueller Flow sieht so aus:
Immer wenn ein neues Produkt hinzugefügt wird, soll dieser Flow schauen ob der Wert im Metafeld custom_label_2 black oder beige ist und diesen Wert dann einem anderen Metafeld filters.farbe hinzufügen.
So sieht es in den conditions aus:
Und so sieht es in den actions aus:
Die Idee ist, dass Produkte, die beide Farben enthalten, auch genau diese beiden Farben im Metafeld filters.farbe zugeteilt kriegen. Bis jetzt fügt meine aktueller Flow immer nur einen von diesen beiden Werten dem Metafeld hinzu, auch wenn es ein Produkt ist, dass diese beiden Farben im Feld custom_label_2 beinhaltet.
Im letzten Screenshot seht ihr, dass der type "list of single line strings" ist. Für das Metafeld filters.farbe habe ich, meines Erachtens nach, auch die korrrekten Einstellungen:
Letztendlich soll im Filter des Shops beim Anklicken eines dieser beiden Farben auch alle Produkte gezeigt werden, die diese Farben enthalten.
Wie ist das möglich? Wo liegt mein Fehler im Flow oder anderen Einstellungen? Aktuell habe ich im Flow immer "otherwise" conditions, wenn es nicht die eine Farbe enthält. Soll es aber eher immer ein neuer Condition string vom Initialtrigger sein?
Vielen Dank im Voraus.
Hey @breaddddd
Danke für die Angaben und ich sehe du warst auch in Kontakt mit @paul_n, einem unserer Entwickler.
Das Hinzufügen mehrerer Werte zu einem Custom Metafeld in Shopify und das Nutzen dieser für Filterzwecke kann somit durchaus komplex werden, insbesondere wenn du eine Lösung suchst, die mehrere Bedingungen berücksichtigt. Dein Anliegen, Farbwerte wie "black" oder "beige" einem Produkt zuzuweisen und diese dann im filters.farbe
Metafeld zu speichern, erfordert eine spezielle Logik, da Shopify Flow von sich aus keine direkte Unterstützung für solch spezifische Szenarien bietet, wie es aussieht.
Basierend auf deiner Beschreibung und den Hinweisen Pauls scheint das Problem in der Logik deines Shopify Flow zu liegen, da es jeweils nur einen Pfad durchläuft, statt beide Bedingungen (schwarz und beige) zu berücksichtigen, wenn ein Produkt beide Farben enthält. Um dieses Problem zu lösen, könntest du entweder die Logik innerhalb von Shopify Flow anpassen (falls das möglich ist) oder, wie Paul vorschlug, einen benutzerdefinierten Code verwenden, der flexibler ist und eine bessere Kontrolle über komplexe Logiken bietet.
Shopify Flow bietet nach meinen Recherchen derzeit keine native Unterstützung für komplexe Logikoperationen, wie das Hinzufügen mehrerer Werte zu einem Metafeld basierend auf mehreren Bedingungen. Du könntest versuchen, die Logik so anzupassen, dass du zunächst prüfst, ob das Produkt beide Farben enthält, und dann entsprechend handelst. Dies könnte jedoch schnell komplex werden, je nachdem, wie viele verschiedene Bedingungen und Aktionen du hast.
Der vorgeschlagene benutzerdefinierte Code-Ansatz aus Github ermöglicht es dir, genauer festzulegen, wie die Farbwerte zu den Metafeldern hinzugefügt werden sollen. In deinem Fall müsstest du die Logik so anpassen, dass sie speziell für die Farben "black" und "beige" funktioniert, anstatt für allgemeine Farb-Tags.
Hier eine angepasste Version des Codes, die ggf. funzen könnte:
export default function main({product}) {
// Bestehende Werte im Metafeld filters.farbe
const filtersFarbeMetafieldObject = product.metafields.find((metafield) => metafield.namespace === "filters" && metafield.key === "farbe");
const filtersFarbe = filtersFarbeMetafieldObject ? JSON.parse(filtersFarbeMetafieldObject.value) : [];
const colorValues = ["black", "beige"]; // Die Farbwerte, die du überprüfen möchtest
// Überprüfe, ob das Produkt-Label die Farben enthält
colorValues.forEach((colorValue) => {
if (product.metafields.some((metafield) => metafield.namespace === "custom" && metafield.key === "custom_label_2" && metafield.value.includes(colorValue))) {
if (!filtersFarbe.includes(colorValue)) {
filtersFarbe.push(colorValue);
}
}
});
// Ausgabe eines Strings, der direkt an eine Metafeld-Aktualisierungsaktion übergeben werden kann
return { filtersFarbe: JSON.stringify(filtersFarbe) };
}
Dieser Code prüft, ob im custom_label_2
-Metafeld die Werte "black" oder "beige" enthalten sind, und fügt diese dann dem filters.farbe
-Metafeld hinzu. Beachte, dass diese Lösung voraussetzt, dass du eine Möglichkeit hast, benutzerdefinierten Code in deinem Shopify-Flow auszuführen, was durch die "Run code"-Aktion ermöglicht werden könnte, falls diese verfügbar ist. Wage ich aber fast zu bezweifeln.
Falls nicht, könntest du externe Tools oder Apps wie Metafield Guru verwenden, die mit Shopify API integrieren und die Ausführung benutzerdefinierter Logik ermöglichen.
Weitere Workarounds:
Shopify ermöglicht die Erstellung von Metafield-Listen, die mehrere Werte in einem einzigen Metafeld speichern können. Diese Listen können für eine Vielzahl von Inhaltstypen verwendet werden, einschließlich Textfelder, Farben, URLs und mehr. Metafield-Listen bieten eine praktische Lösung, um Produkteigenschaften wie Farben flexibel zu verwalten und im Shop für Filterzwecke darzustellen (Mehr dazu hier im Shopify Help Center).
Shopify unterstützt auch verschiedene Metafeld-Typen, darunter Boolesche Werte, Farbcodes, Daten, Dimensionen und sogar JSON-Objekte. Für jedes Metafeld und dessen Definition wird ein Typ festgelegt, der bestimmt, welche Art von Informationen gespeichert werden können. Die Nutzung von JSON für komplexe Datenstrukturen oder Listen für die Speicherung mehrerer Referenztypen könnte hier von Nutzen sein, um mehrere Farben oder andere Eigenschaften in einem Produkt zu verwalten (Mehr dazu hier).
Es wurden ähnliche Herausforderungen bei der Nutzung von Metafeldern für die Filterung hier in der Community diskutiert. Es scheint, dass die integrierte Filterfunktionalität von Shopify Einschränkungen aufweist, insbesondere wenn Produkte mehrere Werte für ein Attribut aufweisen, wie z.B. mehrere diätetische Eigenschaften oder Farben. Die Möglichkeit, mehrere Werte effizient zu filtern, ist ein häufig angefragtes Feature, das derzeit durch Standardfunktionen von Shopify nicht vollständig abgedeckt wird (Siehe einen Community Beitrag hier).
FAZIT: Eine direkte Lösung innerhalb von Shopify Flow für das Hinzufügen und effektive Filtern nach mehreren Werten in einem Custom Metafeld scheint nicht ohne Weiteres möglich zu sein. Alternativ könnten benutzerdefinierte Lösungen, wie die Nutzung von JavaScript für spezifische Theme-Anpassungen oder die Integration von Apps, die die Shopify API nutzen, um fortgeschrittene Logiken zu implementieren, eine weitere Rolle spielen. Es bleibt zu hoffen, dass Shopify eine Unterstützung für komplexe Filterlogiken in Zukunft erweitert, um solche Anforderungen direkt innerhalb der Plattform zu ermöglichen.
Hoffe das hilft dir weiter - lass wissen falls nicht! 😉
---
Warum nicht etwas Gamification in das Shop einbauen, um deinen Kunden etwas Fun im Shop anzubieten? Gerne kann ich bei Interesse Tipps dazu geben!
Hast du weitere Fragen zum Shop? Gebe einfach ein Suchbegriff oben in der Suchleiste der Community Landingpage ein, denn das Thema haben wir sehr wahrscheinlich schon besprochen. Halte bitte Ausschau in deiner E-Mail auf Notifications zu Antworten auf deine Fragen in der Community.
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Hi Gabe!
Entschuldige bitte die späte Rückmeldung. Ich habe es leider noch nicht geschafft deinen Lösungsansatz umzusetzen. Nichtsdestotrotz möchte ich mich bei dir für diese ausführliche Anleitung bedanken, ich weiß es sehr zu schätzen.
Sobald ich deinen Ansatz umgesetzt habe, werde ich mich nochmal melden!
Mach das und halte uns auf dem Laufenden wie das geht! 😉
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Hi Gabe,
habe mich jetzt mal ran versucht. Der Flow sieht wie folgt aus:
Der Code im "Run Code" ist folgender:
export default function main({product}) {
// Bestehende Werte im Metafeld filters.farbe
const filtersFarbeMetafieldObject = product.metafields.find((metafield) => metafield.namespace === "filters" && metafield.key === "farbe");
const filtersFarbe = filtersFarbeMetafieldObject ? JSON.parse(filtersFarbeMetafieldObject.value) : [];
const colorValues = ["schwarz", "beige", "braun", "weiß", "grau", "grün", "orange", "lila", "gelb", "blau", "rosa", "rot","bunt"]; // Die Farbwerte, die du überprüfen möchtest
// Überprüfe, ob das Produkt-Label die Farben enthält
colorValues.forEach((colorValue) => {
if (product.metafields.some((metafield) => metafield.namespace === "mm-google-shopping" && metafield.key === "custom_label_2" && metafield.value.includes(colorValue))) {
if (!filtersFarbe.includes(colorValue)) {
filtersFarbe.push(colorValue);
}
}
});
// Ausgabe eines Strings, der direkt an eine Metafeld-Aktualisierungsaktion übergeben werden kann
return { filtersFarbe: JSON.stringify(filtersFarbe) };
}
Ich habe folgende Error-Meldung bekommen:
Ich habe leider nicht so viel Ahnung vom Programmieren, weswegen ich vermute, dass meine Daten im Code oben falsch eingetragen wurden oder etwas fehlt. Ich habe im Code alle möglichen Farben hinzugefügt, die ich auch schon im Vornherein dem Metafeld "filters.farbe" zugeteilt habe. Im Prinzip soll es am Ende so sein, dass ein Produkt was schwarz und grün enthält, beide Werte "schwarz" und "grün" zum Metafeld "filters.farbe" erteilt bekommt.
Vielen Dank im Voraus!
Hey @breaddddd
Super, somit bist du einen Schritt weiter um Metafelder basierend auf bestimmten Bedingungen zu automatisieren, und du bist auf das Problem gestossen, mehrere Farbwerte zu einem Metafeld hinzuzufügen.
Die Fehlermeldung deutet darauf hin, dass auf eine Eigenschaft eines undefinierten Objekts zugegriffen wurde, was bedeutet, dass entweder das product
-Objekt oder das metafields
-Attribut darin nicht wie erwartet definiert ist oder nicht an deine Funktion übergeben wurde.
Hier ein paar Dinge die du ausprobieren kannst:
Stelle sicher, dass das product
-Objekt, das an deine Funktion übergeben wird, tatsächlich existiert und das Attribut metafields
enthält. Wenn product
oder product.metafields
undefined
ist, würde dies zu dem Fehler führen, den du siehst.
Überprüfe, ob der Namespace, der für das custom_label_2
-Metafeld verwendet wird, tatsächlich mm-google-shopping
lautet und dass der Key korrekt als custom_label_2
angegeben wurde.
Der Code, den du verwendest, scheint auf der Annahme zu basieren, dass das filtersFarbeMetafieldObject.value
-Attribut ein JSON-String ist, der in ein Array umgewandelt werden kann. Dies ist ein gängiger Ansatz, aber du solltest sicherstellen, dass das Wertfeld des Metafelds tatsächlich im JSON-Format vorliegt und nicht nur ein einfacher String ist.
Wenn du versuchst, mehrere Werte in das filters.farbe
-Metafeld zu schreiben, stelle sicher, dass dieses Metafeld als Liste von Strings (oder einem ähnlichen, für Listen geeigneten Format) definiert ist.
Wenn du den Flow so einstellst, dass mehrere Farben erfasst werden können, musst du sicherstellen, dass der Flow entsprechend strukturiert ist. Anstatt eine "andernfalls"-Bedingung zu verwenden, solltest du den Flow so strukturieren, dass jede Farbe individuell überprüft wird und dann, wenn sie im custom_label_2
vorhanden ist, dem Array filtersFarbe
hinzugefügt wird.
Die Nutzung der "Run code"-Aktion ist ein guter Ansatz, aber sie kann kompliziert sein, wenn man nicht mit dem Schreiben von Code vertraut ist. Wenn Shopify Flow nicht flexibel genug ist, könntest du auch eine App oder einen Service in Erwägung ziehen, der die erforderliche Logik außerhalb von Shopify implementiert und dann über die Shopify API mit deinem Shop kommuniziert.
Stelle schließlich sicher, dass du einen validen JSON-String zurückgibst. Im obigen Code gibst du ein Objekt mit einer Eigenschaft filtersFarbe
zurück, aber abhängig davon, wie Shopify Flow damit umgeht, könnte es sein, dass du nur den Wert als String zurückgeben musst.
Wenn du weiterhin Schwierigkeiten hast und Unterstützung bei der Fehlerbehebung oder beim Erstellen des erforderlichen Codes benötigst, kann ich gerne einen Shopify-Experten oder Entwickler empfehlen, der Erfahrung mit Shopify Flow und der Entwicklung von benutzerdefinierten Automatisierungen hat.
Du kannst deine Frage auch, wie gesagt, in unserem Flow Forum posten, wo es weitere Flow Experten gibt hier.
Hoffe das hilft dir weiter - lass wissen falls nicht! 😉
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Hey Gabe!
Danke für die schnelle Antwort.
Ich glaube das Problem liegt tatsächlich in Punkt 3 deiner aufgelisteten Punkte. Das metafeld "filters.farbe" ist wie folgt definiert:
Also lösche ich das vorhandene Metafeld "filters.farbe" erstelle ein Neues mit dem selben Name, aber im JSON Type.
Hier hört jetzt auch mein Wissen auf. Wie stelle ich hier ein, welche Farben es gibt und dass mehrere Farben gleichzeitig als Wert hinzugefügt werden können, also das was du in Punkt 4 sagst?
Bezüglich Punkt 5: Also ist mein Flow, Stand jetzt, falsch eingestellt? Ich dachte einfach nur den Code "runnen" würde helfen als "action" auf mein Trigger "product added to store". Das überfordert mich jetzt sehr 😂
Ich werde auch mal meinen ursprünglichen Post im Flow Forum updaten, bzw. Paul updaten. Der Post dazu ist ja schon im Shopify Flow Forum. Oder meinst du ich soll meinen ursprünglichen Beitrag nochmal posten?
Danke dir tausend Mal!
Ja, ich sehe der Paul hat dir geantwortet. Ich würde immer schnell antworten denn wenn man schonmal einen unserer Experten im Schlepptau hat, das ist eine einmalige Gelegenheit!
Teu teu teu mit dem Problem - ich hoffe du findest eine Lösung! 😉
VG,
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Hey Gabe,
entschuldige bitte die späte Rückmeldung, aber ich habe mit dem Entwickler Team der Seite einen Weg gefunden das Problem zu lösen. Wir haben einfach ein zusätzliches Metafeld kreiert, dass die Werte aus dem anderen Metafeld als Listenwerte abfängt und das Attribut "bunt" zusätzlich hinzufügt, wenn das Produkt 2 Farben hat.
Dennoch vielen Dank für deine Hilfe! Ich weiß deine investierte Zeit zu schätzen!
Hey @breaddddd
Das freut mich zu hören und hoffe das wird klappen!
Teu teu teu mit dem Shop! 😉
Gabe | Social Care @ Shopify
- War meine Antwort hilfreich? Klicke Like um es mich wissen zu lassen!
- Wurde deine Frage beantwortet? Markiere es als Akzeptierte Lösung
- Um mehr zu erfahren, besuche das Shopify Help Center oder den Shopify Blog
Teil 2 - Wie die Prinzipien des UX-Designs dir dabei helfen können einen großartigen Shop ...
By Kai Sep 16, 2024Teil 1 - Wie die Prinzipien des UX-Designs dir dabei helfen können einen großartigen Shop ...
By Kai Sep 9, 2024Anpassungen des benutzerdefinierten Codes an Shopify-Themes (CSS) leicht gemachtIn diesem...
By Gabe Aug 28, 2024