FROM CACHE - jp_header

アプリ「Order Printer」にメタフィールドの値を表示させたい

解決済

アプリ「Order Printer」にメタフィールドの値を表示させたい

k371573
Shopify Partner
9 2 1

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 %}

 

 

image.png

 

同じ問題を抱えていて解決された方がいましたら、アドバイスをいただけないでしょうか?
1 件の受理された解決策
Qcoltd
Shopify Partner
1084 442 438

成功

なるほどです。

確かに、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 (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/

元の投稿で解決策を見る

5件の返信5

Qcoltd
Shopify Partner
1084 442 438

動作確認をしておりませんが、

.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

となるはずです。

 

もし、すでに上記をお試しでしたら申し訳ございません。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
k371573
Shopify Partner
9 2 1

アドバイスありがとうございます!
Shopifyのドキュメントのリンクも貼っていただき、ありがとうございます。

 

>.valueが不要なのではないでしょうか?
これも既に試していたのですが、やはり出力されず・・・。
普通のliquidファイル(product-template.liquidなど)ですと、ご記載の通り一般的な出力構文 {{ resource.metafields.namespace.key }}でメタフィールドの値が出力されるんですが、Order Printerは違うみたいです。。

k371573
Shopify Partner
9 2 1

いままで試したことを追記します。

 

【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に出力すうる方法」を聞いてみました。現在返事待ち。

Qcoltd
Shopify Partner
1084 442 438

成功

なるほどです。

確かに、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 (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
k371573
Shopify Partner
9 2 1

株式会社Q (キュー) 田辺様

 

ありがとうござます!

ご教示いただいた以下のコードでメタフィールドの値を出力できました。

 

{% for line_item in line_items %}
{{ line_item.product.metafields.en_product_name.value }}
{% endfor %}

 

Order Printerでメタフィールドを出力するときは、namespaceが不要なのですね・・・。とても勉強になりました。本当にありがとうございました。