Liquid, JavaScript, Themes
Hallo,
Anwendungsfall:
Ich möchte mit PHP die Produkt Übersetzungen mit GraphQL Updaten. Die Übersetzungen sind in Shopify "Localize / Translate & Adapt". Mit dem Code unten kann ich die Englischen Titel und Beschriebungen Abfragen.
Frage:
Wie lautet die query wenn ich Titel und/oder Beschreibungen Updaten möchte?
Bild von "Translate & Adapt":
GraphQL Query zum Abfrage der Englischen Titel/Beschreibung von "Localize":
# QUERY/PHP $query = 'query { product(id: "gid://shopify/Product/123456789") { id en: translations(locale:"en"){ key locale value} } }'; $data_string = json_encode(array("query" => $query)); # CURL $curl = curl_init("https://xxxxxx.myshopify.com/admin/api/2023-04/graphql.json"); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 90); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Authorization: Basic ' . base64_encode("xxx:xxx"), 'Content-Length: ' . strlen($data_string), 'X-GraphQL-Cost-Include-Fields: true' )); # RESULT $curl_response = curl_exec($curl); if ($curl_response === false) curl_close($curl); $responseArr = json_decode($curl_response, true); print_r($responseArr);
Gelöst! Zur Lösung
Erfolg.
Hallo Gabe,
vielen Dank, das Updaten der Englischen Titel und Beschreibungen klappt nun! Der Trick ist wie oben erwähnt die vorherige Abfrage für den "translatableContentDigest" Wert. Hier zur Zusammenfassung meiner funktionierenten Abfragen.
1. Abfrage des "digest" Wertes mit der Produkt ID
- mit dieser Query erhält man den "digest" Wert für den DE Titel und Beschreibung für den nächsten EN Update Call.
$query = 'query {
translatableResource(resourceId: "gid://shopify/Product/' . $id . '") {
resourceId
translatableContent {
key
value
digest
locale
}
translations(locale: "en") {
key
value
locale
}
}
}';
# 1.
$queryString = json_encode(array(
"query" => $query
));
Response:
1. Update des englischen Titels, Beschreibung
$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
translationsRegister(resourceId: $resourceId, translations: $translations) {
userErrors {
message
code
field
}
translations {
key
value
}
}
}';
$variables = array(
"resourceId" => "gid://shopify/Product/8398574092630",
"translations" => [
[
"locale" => "en",
"key" => "title",
"value" => "new englisch titel",
"translatableContentDigest" => "4c2aa73351777fb789c8d0c43fd79433ddbf5578b9d046c433ea516fbb497e12"
],
[
"locale" => "en",
"key" => "body_html",
"value" => "new englisch desc",
"translatableContentDigest" => "6cf690b31996ba260afafd6fa6da70bc1c4df6489ba68531774a2e7b1b5fbb95"
]
]
);
$queryString = json_encode(array(
"query" => $mutation,
"variables" => $variables
));
Response:
Shopify:
- die Werte wurde erfolgreich geupdatet
Hey @Philipp_S
Danke für die Angaben. Hast du die versch. Leitfaden zum Thema GraphQL mutation to update translations hier schon gesehen?
Es scheint Shopify hat keine eingebaute GraphQL Mutation, um Übersetzungen zu aktualisieren. Vielleicht die Produktinformationen direkt zu aktualisieren, indem man die entsprechenden Mutationen verwenden? PHP Beispiel:
# GraphQL Mutation
$mutation = '
mutation {
productUpdate(
input: {
id: "gid://shopify/Product/123456789",
title: "Neuer Produkt-Titel",
descriptionHtml: "Neue Produkt-Beschreibung"
}
) {
product {
id
title
descriptionHtml
}
userErrors {
field
message
}
}
}';
$data_string = json_encode(array("query" => $mutation));
# Die restliche Logik bleibt gleich
Oder möchtest du die translationsRegister
Mutation verwenden? Beachte jedoch, dass dies den Titel und die Beschreibung auf der Standardsprache aktualisiert. Oder es haben die API-Endpunkte und Methoden sich seit dem letzten Update geändert, kann ich derzeit nicht sagen ¯\_(ツ)_/¯.
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
Hallo Gabe,
danke für deine schnelle Rückmeldung.
Deine query ändert den Titel und die Beschreibung der Standart Sprache (de) des Shops, jedoch nicht die (en) Texte. Werde aus der Dokumentation leider auch nicht schlauer 🙂
Hast du ggf. ne Idee wie die mutation aussehen könnte für en?
Die Hauptidee hinter der Mutation translationsRegister
besteht darin, eine Übersetzung für eine Nicht-Standardsprache im Shop zu registrieren. Um das zu tun, einfach die Nicht-Standardsprache angeben (in deinem Fall "en").
So könnte dann eine Mutationsanfrage aussehen:
$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
translationsRegister(resourceId: $resourceId, translations: $translations) {
userErrors {
message
code
field
}
translations {
key
value
}
}
}';
$variables = array(
"resourceId" => "gid://shopify/Product/123456789",
"translations" => [
[
"locale" => "en",
"key" => "title",
"value" => "New product title",
"translatableContentDigest" => "digestfrompreviousquery"
],
[
"locale" => "en",
"key" => "description",
"value" => "New product description",
"translatableContentDigest" => "digestfrompreviousquery"
]
]
);
$data_string = json_encode(array(
"query" => $mutation,
"variables" => $variables
));
// Der Rest der CURL Logik bleibt gleich...
Beachte, dass die translatableContentDigest
Werte in den translations
korrekt sein müssen. Man sollten die Werte verwenden, die man in der vorherigen Abfrage von translatableResource
erhalten hat. Auch der "resourceId" Wert muss korrekt sein, sprich, die eindeutige ID des Produkts.
In manchen Fällen möglicherweise andere Schlüssel verwenden, sprich, die du in der vorherigen Abfrage von translatableResource
erhalten hast.
Bei weiteren Fragen kann ich gerne einen Experten empfehlen!
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
Vielen Dank für die Info. Habe die Query oben schon versucht zu erstellen, mir waren jedoch die 'translatableContentDigest' Werte und die resourceId unbekannt. Werde diese vorab Abfragen und dann die Query testen bzw. bescheid geben obs geklappt hat.
Ich hoffe das klappt! Ich bin am Montag wieder da und wir können das ganze Thema dann etwas weiter ausreizen!
Schönes W-Ende! 😉
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
Erfolg.
Hallo Gabe,
vielen Dank, das Updaten der Englischen Titel und Beschreibungen klappt nun! Der Trick ist wie oben erwähnt die vorherige Abfrage für den "translatableContentDigest" Wert. Hier zur Zusammenfassung meiner funktionierenten Abfragen.
1. Abfrage des "digest" Wertes mit der Produkt ID
- mit dieser Query erhält man den "digest" Wert für den DE Titel und Beschreibung für den nächsten EN Update Call.
$query = 'query {
translatableResource(resourceId: "gid://shopify/Product/' . $id . '") {
resourceId
translatableContent {
key
value
digest
locale
}
translations(locale: "en") {
key
value
locale
}
}
}';
# 1.
$queryString = json_encode(array(
"query" => $query
));
Response:
1. Update des englischen Titels, Beschreibung
$mutation = '
mutation translationsRegister($resourceId: ID!, $translations: [TranslationInput!]!) {
translationsRegister(resourceId: $resourceId, translations: $translations) {
userErrors {
message
code
field
}
translations {
key
value
}
}
}';
$variables = array(
"resourceId" => "gid://shopify/Product/8398574092630",
"translations" => [
[
"locale" => "en",
"key" => "title",
"value" => "new englisch titel",
"translatableContentDigest" => "4c2aa73351777fb789c8d0c43fd79433ddbf5578b9d046c433ea516fbb497e12"
],
[
"locale" => "en",
"key" => "body_html",
"value" => "new englisch desc",
"translatableContentDigest" => "6cf690b31996ba260afafd6fa6da70bc1c4df6489ba68531774a2e7b1b5fbb95"
]
]
);
$queryString = json_encode(array(
"query" => $mutation,
"variables" => $variables
));
Response:
Shopify:
- die Werte wurde erfolgreich geupdatet
Hey @Philipp_S
Wow klasse Arbeit und danke fürs updaten!
Das wird auch andere hier helfen können! 😉
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
Teil 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, 2024Du willst also das Dropshipping betreiben, da du einen Shop starten möchtest, ohne selb...
By Gabe Jul 10, 2024