メタフィールドで表示される、値の順番がおかしい

Topic summary

メタフィールドで店舗情報を「東京、愛知、三重、滋賀」の順に追加したが、実際の表示では「東京、滋賀、三重、愛知」とアルファベット順(a-z)で並んでしまう問題が報告されました。

原因:
メタオブジェクトのハンドルが英語表記(tokyo_store、aichi_store、mie_store、shiga_store)になっており、アルファベット順で自動的にソートされている。

解決策として2つの方法が提案されました:

  1. ハンドル名を変更する方法

    • 東京店:store_01、愛知店:store_02、三重店:store_03、滋賀店:store_04のように番号付きに変更すると、意図した順序で表示可能。
  2. 並び順用の項目を追加する方法

    • メタオブジェクト定義に並び順用のフィールドを追加し、コードでsortフィルターを使用して任意の順序でソート。
    • 例:{% assign sorted_metaobject = shop.metaobjects.shopList.values | sort: "sort" %}

画像付きで具体的な設定方法が説明されています。

Summarized with AI on November 8. AI used: claude-sonnet-4-5-20250929.

質問をご覧いただきありがとうございます。

メタフィールドの出力は、「エントリーを追加した順」ではないのでしょうか?

以下の画像のように、「東京、愛知、三重、滋賀」という順に追加したのですが、

↓ のように、東京、滋賀、三重、愛知 という順番に表示されています。

↓ こちらが該当のコードになります。

<p>店舗一覧</p>
<div class="shop_list">
  {%- for shopInfo in shop.metaobjects.shopList.values -%}
    <div class="shop_info">
      <p>店舗名:{{ shopInfo.name }}</p>
      <p>店舗住所:{{ shopInfo.address }}</p>
    </div>
  {%- endfor -%}
</div>

メタフィールドの出力は、「エントリーを追加した順」ではないのでしたら、どのようなルールで表示順が決まってくるのでしょうか?

お手数お掛けしますが、ご存じの方がみえましたら教えていただけますと幸いです。

▽参考にしたサイト

https://commerce-media.info/blogs/ec/meta-object

@mw_7

ご質問いただいている、メタオブジェクトの出力順についてですが、
メタオブジェクトのカスタムオブジェクトのハンドルを下記のように英語表示されていませんでしょうか。

東京店:tokyo_store
愛知店:aichi_store
三重店:mie_store
滋賀店:shiga_store
英語表記されていると、ハンドル順「aからz」の順で並んでいる様です。

ハンドルを変更するこができる場合は、
東京店:store_01
愛知店:store_02
三重店:store_03
滋賀店:store_04
のように登録すると、東京、愛知、三重、滋賀の順に表示することが可能です。

もし、ハンドルを変更するとが難し様でしたら、カスタムデータメタオブジェクト定義の店舗一覧に添付画像のような、
並び順用の項目を追加し、並び順の任意にソートする方法もあります。

添付画像のキーsortを赤字部分に指定した下記コードを使い、

店舗一覧

{%- assign sorted_metaobject = shop.metaobjects.shopList.values | sort: "**sort**" -%} {%- for shopInfo in sorted_metaobject -%}

店舗名:{{ shopInfo.name }}

店舗住所:{{ shopInfo.address }}

{%- endfor -%}

下記順番で並び順を指定した場合、
東京店:3
愛知店:4
三重店:1
滋賀店:2
添付のように順番で並びます。

ご参考まで
(キュー小坂)