Liquid、JavaScriptなどに関する質問
ShopifyFLOWについて皆さんの知恵を拝借させてください。
●詰まっている箇所
ShopifyFLOWを使用した、会員登録時に取得した項目を各顧客のメモ欄に出力し、それを該当するメタフィールドに自動反映させるオートメーション機能
●聞きたいことの要約
一部のメタフィールドの更新が、エラーが表示され実行されない問題の解決方法およびアイデア
●起きている問題
Got error updating metafield: "Value must be a single line text string." For value: " テスト"
●解決するために試したこと
・誤字脱字の確認
・メモ欄から取得するコード(” を ’ に変更するなど)
・漢字ではなく英語で登録する
・メタフィールドのタイプを「multi line text」に設定する
└オートメーションが再試行中となり、永遠に実行されない
・メタフィールドのタイプを「Integer」に設定する
●問題について自分なりに考えたこと
・「date」で出力している誕生日メタフィールドについては正常に表示されているため、恐らく難解な問題ではない
main-register.liquid
<div class="field">
<input
type="date"
name="customer[note][Birthday]"
id="RegisterForm-Birthday"
{% if form.birthday %}value="{{ form.birthday }}"{% endif %}
autocomplete="bday"
placeholder="{{ 'customer.register.birthday' | t }}"
>
<label for="RegisterForm-Birthday">
{{ 'customer.register.birthday' | t }}
</label>
</div>
<div class="field">
<input
type="text"
name="customer[note][Furigana]"
id="RegisterForm-Furigana"
{% if form.furigana %}value="{{ form.furigana }}"{% endif %}
placeholder="{{ 'customer.register.furigana' | t }} "
>
<label for="RegisterForm-Furigana">
{{ 'customer.register.furigana' | t | append: ' ※セイメイ'}}
</label>
</div>
<div class="field">
<input
type="text"
name="customer[note][Job]"
id="RegisterForm-Job"
{% if form.job %}value="{{ form.job }}"{% endif %}
placeholder="{{ 'customer.register.job' | t }}"
>
<label for="RegisterForm-Job">
{{ 'customer.register.job' | t }}
</label>
</div>
flow(value)
{%- assign notes = customer.note | strip | newline_to_br | split: '<br />' -%}
{%- for note in notes -%}
{%- if note contains "Furigana: " -%}
{{ note | replace: 'Furigana: ', '' }}
{%- endif -%}
{%- endfor -%}
思い当たるTipsやヒントだけでもないか、何卒ご協力をお願いします。。。!
解決済! ベストソリューションを見る。
成功
原因を説明できないのですが、
Shopify Flowのアクションでメタフィールドのvalueを設定する際、
下記のようにされてはいかがでしょうか?
{%- assign notes = customer.note | strip | newline_to_br | split: '<br />' -%}
{%- for note in notes -%}
{%- if note contains "Furigana: " -%}
{{ note | replace: 'Furigana: ', '' }}
{%- endif -%}
{%- endfor -%}
↓
{%- assign notes = customer.note | strip | newline_to_br | split: '<br />' -%}
{%- for note in notes -%}
{%- if note contains "Furigana: " -%}
{{ note | replace: 'Furigana: ', '' | strip }}
{%- endif -%}
{%- endfor -%}
noteを出力する際、stripし、前後の空白改行を削除します。
質問者様と同等の状況を私の開発ストアに作って検証し、
Shopify Flowのエラーメッセージを確認した際、
エラーメッセージ上では、
フリガナに入力した「テスト」や
職業に入力した「検証」という文字列の直前に空白が入っていることに気がつきました。
質問者様が添付してくださった画像を確認しても、
Shopify Flowのエラーメッセージの箇所で、
For value: " 検証"
のように、「検証」という文字列の直前に空白が入っているように見えます。
Single Line Textにルールに抵触するということは、
この空白は改行を意味するものと思われます。
なぜ、ここに改行が入ってしまうのかを説明できないのですが、
改行が入ってしまうのであれば、stripすればうまくいくのではないかと思います。
(私の環境ではうまく動きました。)
なお、
Customer Noteの1行目については、
この現象が発生しないようです。
そのため、誕生日はうまく動いているのだと思います。
ご参考まで。
(キュー田辺)
成功
原因を説明できないのですが、
Shopify Flowのアクションでメタフィールドのvalueを設定する際、
下記のようにされてはいかがでしょうか?
{%- assign notes = customer.note | strip | newline_to_br | split: '<br />' -%}
{%- for note in notes -%}
{%- if note contains "Furigana: " -%}
{{ note | replace: 'Furigana: ', '' }}
{%- endif -%}
{%- endfor -%}
↓
{%- assign notes = customer.note | strip | newline_to_br | split: '<br />' -%}
{%- for note in notes -%}
{%- if note contains "Furigana: " -%}
{{ note | replace: 'Furigana: ', '' | strip }}
{%- endif -%}
{%- endfor -%}
noteを出力する際、stripし、前後の空白改行を削除します。
質問者様と同等の状況を私の開発ストアに作って検証し、
Shopify Flowのエラーメッセージを確認した際、
エラーメッセージ上では、
フリガナに入力した「テスト」や
職業に入力した「検証」という文字列の直前に空白が入っていることに気がつきました。
質問者様が添付してくださった画像を確認しても、
Shopify Flowのエラーメッセージの箇所で、
For value: " 検証"
のように、「検証」という文字列の直前に空白が入っているように見えます。
Single Line Textにルールに抵触するということは、
この空白は改行を意味するものと思われます。
なぜ、ここに改行が入ってしまうのかを説明できないのですが、
改行が入ってしまうのであれば、stripすればうまくいくのではないかと思います。
(私の環境ではうまく動きました。)
なお、
Customer Noteの1行目については、
この現象が発生しないようです。
そのため、誕生日はうまく動いているのだと思います。
ご参考まで。
(キュー田辺)
Qcoltd様
迅速なご回答、並びに検証、解決に至るまで誠にありがとうございます。
フリガナ、職業メタフィールド共に正常に出力されました。
解説も非常にわかりやすく、思考プロセスも大変参考になりました。
コミュニティで質問をするのは初めてだったのですが、Qcoltd様にご回答いただけて本当に良かったです。
繰り返しになりますが、この度はご回答いただき誠にありがとうございました。
Chrono
@chrono_ 様
うまくいったとのことで安心いたしました。
ところで、
今回の現象について思いついたことがあり、
検証してみたところ原因がわかりました。
下記のコードを検証しました。
{% capture notes_raw %}Birthday: 2023-01-19
Furigana: テスト
Job: 検証{% endcapture %}
{{ notes_raw | strip | newline_to_br }}
このコードの出力は下記のようになりました。
Birthday: 2023-01-19<br />
Furigana: テスト<br />
Job: 検証
「改行」を「\n」という文字で表しますと、
上記は下記のように表されます。
Birthday: 2023-01-19<br />\nFurigana: テスト<br />\nJob: 検証
これを、<br />でsplitしますと、下記のような配列になります。
["Birthday: 2023-01-19","\nFurigana: テスト","\nJob: 検証"]
このように、
Customer Noteの2行目以降の値は、
先頭に「\n」(改行)が入ってしまうことになるようです。
「newline_to_br」というフィルターは、その名前から、
改行を<br />に変換するものだと思っていたのですが、
そうではなく、
改行を、<br />+改行に変更するものだったようです。
ご参考まで。
(キュー田辺)
キュー田辺様
引き続きご回答ありがとうございます。
今回の問題の発生した原因についても非常に腑に落ちました。
「Customer Noteの2行目以降の値は、先頭に\n(改行)が入る」
「newline_to_brは、改行を<br />に変換するものではなく、改行を追加する」
上記の仕様が見えていなかったのですね。
解決だけでなく、原因の解明まで対応いただき、大変参考になりました。
重ねてお礼申し上げます。
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 6, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 29, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024