Shopify アプリに関する話題はこちら
Shopifyで日・英の多言語サイトを作成しています。
サイト上のテキストや商品名を英語訳するために「T Lab - AI Language Translate」を使っています。インボイスの発行には「Order Printer( https://apps.shopify.com/order-printer )」を使っています。
英語で購入されたお客さんには、英語の商品名が記載されたインボイスを渡したいと思っているのですが、翻訳アプリでの翻訳がOrder Printerに反映されないことは承知しています。
なので、代替案として「設定>メタフィールド>カスタムフィールド>商品」で商品メタフィールドを使って、「英語の明細書に出力する用の英語商品名記載エリア」を作成し、その値をOrder Printerに出力しようと考えています。
参考にしたのは以下のコミュニティの記事です。
・Order Printer Metafield
https://community.shopify.com/c/shopify-apps/order-printer-metafield/td-p/317957
・Order Printer の明細内にメタフィールド表示
https://community.shopify.com/c/shopify-%E3%82%A2%E3%83%97%E3%83%AA/order-printer-%E3%81%AE%E6%98%8E...
これらのコミュニティの情報を参考に、以下のコードを書いてみましたが、メタフィールドが出力されませんでした。
{% for line_item in line_items %}
{{ line_item.product.metafields.custom.en_product_name.value }}
{% endfor %}
解決済! ベストソリューションを見る。
成功
なるほどです。
確かに、Order PrinterのMetafieldsの扱いは特殊なようですね。
下記のコードでOrder Printerにおける、Metafieldsの内容を確認してみました。
{% for field in line_item.product.metafields %}
{{ field }}
{% endfor %}
{{ field }}の内容を確認すると、どうやらnamespaceが不要なようです。
そして、おっしゃる通り、valueは必要なようです。
ですので、質問者様の場合ですと、下記のコードでうまくいくかと思います。
{% for line_item in line_items %}
{{ line_item.product.metafields.en_product_name.value }}
{% endfor %}
(Order Printerでmetafieldsにアクセスすると、namespaceは無視されるため、customを抜きました。)
ご参考まで。
(キュー田辺)
動作確認をしておりませんが、
.valueが不要なのではないでしょうか?
{% for line_item in line_items %}
{{ line_item.product.metafields.custom.en_product_name }}
{% endfor %}
Shopifyのドキュメントを見る限り、
https://shopify.dev/api/liquid/objects#metafield-access-metafields
metafieldsの出力構文は、
{{ resource.metafields.namespace.key }}
ですので、
namespace = custom
key = en_product_name
となるはずです。
もし、すでに上記をお試しでしたら申し訳ございません。
ご参考まで。
(キュー田辺)
アドバイスありがとうございます!
Shopifyのドキュメントのリンクも貼っていただき、ありがとうございます。
>.valueが不要なのではないでしょうか?
これも既に試していたのですが、やはり出力されず・・・。
普通のliquidファイル(product-template.liquidなど)ですと、ご記載の通り一般的な出力構文 {{ resource.metafields.namespace.key }}でメタフィールドの値が出力されるんですが、Order Printerは違うみたいです。。
いままで試したことを追記します。
【Shopify公式ヘルプへの問い合わせ】
公式に問い合わせたのですが、コードのカスタマイズに関することはサポート対象外とのことで、コミュニティを紹介していただきました。
ですので、ここで相談した次第です。
【いくつかの出力パターンを試してみる】
<p>日本語の商品名の出力記述→これは普通に本来の商品名(日本語)が出力される</p>
{% for line_item in line_items %}
{{ line_item.title }}
{% endfor %}
<p>試してみたもの①:「.value」をつける→何も出力されない</p>
{% for line_item in line_items %}
{{ line_item.product.metafields.custom.en_product_name.value }}
{% endfor %}
<p>試してみたもの②:「.value」をつけない→何も出力されない</p>
{% for line_item in line_items %}
{{ line_item.product.metafields.custom.en_product_name }}
{% endfor %}
<p>試してみたもの④:一般的な一般的な出力記述で「.value」をつけない→何も出力されない</p>
{{ product.metafields.custom.en_product_name }}
<p>試してみたもの⑤:一般的な一般的な出力記述で「.value」をつける→何も出力されない</p>
{{ product.metafields.custom.en_product_name.value }}
【ストアフロントAPIリクエストに公開】
設定>メタフィールド>商品>作成したメタフィールドを選択>「このメタフィールドをストアフロントAPIリクエストに公開します。ストアフロントAPIを使用して、アプリやストアフロントなどへの読み取りアクセスを許可します。」にチェックを入れる。
→特に変化なし。
【T Lab - AI Language Translate への問い合わせ】
ダメ元で「アプリで翻訳した商品名をOrder Printerに出力すうる方法」を聞いてみました。現在返事待ち。
成功
なるほどです。
確かに、Order PrinterのMetafieldsの扱いは特殊なようですね。
下記のコードでOrder Printerにおける、Metafieldsの内容を確認してみました。
{% for field in line_item.product.metafields %}
{{ field }}
{% endfor %}
{{ field }}の内容を確認すると、どうやらnamespaceが不要なようです。
そして、おっしゃる通り、valueは必要なようです。
ですので、質問者様の場合ですと、下記のコードでうまくいくかと思います。
{% for line_item in line_items %}
{{ line_item.product.metafields.en_product_name.value }}
{% endfor %}
(Order Printerでmetafieldsにアクセスすると、namespaceは無視されるため、customを抜きました。)
ご参考まで。
(キュー田辺)
株式会社Q (キュー) 田辺様
ありがとうござます!
ご教示いただいた以下のコードでメタフィールドの値を出力できました。
{% for line_item in line_items %}
{{ line_item.product.metafields.en_product_name.value }}
{% endfor %}
Order Printerでメタフィールドを出力するときは、namespaceが不要なのですね・・・。とても勉強になりました。本当にありがとうございました。
オンラインストアを運営する中で、商品の返品や交換は重要なプロセスとなります。Shopify管理画面を通して簡単に返品や交換が行えることをご存知でしょうか?希望する場合は、お客...
By Mirai Sep 15, 2024Shopifyの請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024