web-dev-qa-db-ja.com

Shopify Liquidで特定の製品を取得するにはどうすればよいですか?

製品ハンドルのリストがあり、このハンドルに基づいて製品をフェッチしたい。 Liquidに単一の製品を取得するように指示する方法はないようです。 APIでこれを行うことはできますが、APIを使用する場合は、JavaScriptを使用する必要があり、スニペットに既にあるHTMLをコピーし、ロジックもコピーする必要があります。

私が試みているものの縮小版:

{% assign handle = 'my-product-handle' %}
{% assign product = products.handle %}
{% include 'snippet-product-item' %}
19
jayshields

次を使用して、ハンドルを介して製品を取得できるようになりました。

{% assign someProduct = all_products.some-handle %}

現在、これをバックアップするためのドキュメントはありませんが、Shopify側ですぐに具体的なものがあることを願っています。

27
Jason

これを見つけた人のために更新するために、Shopify/liquidリポジトリの この応答 に従ってall_products['handle']によってハンドルを介して製品を直接参照できるようになりました。

9
Bryan Corey

all_products['the-handle-of-the-product']を使用して、任意の液体ページのハンドルで任意の製品にアクセスできるだけでなく、次のような製品変数のように脅威を与えることができます。

{{ all_products['the-handle-of-the-product'].title }}は、product.liquidページの{{ product.title }}と同じです。

6
user3577416

私もこれを探していましたが、液体ファイル内でIDで製品を取得する方法が見つかりませんでした。

しかし、上記の回答が示すように、ハンドルを介して任意の製品にアクセスできます

{{ all_products['product-handle'] }}

気になったのは、商品のハンドル名を変更すると自動的に変更されると思っていたのですが、実際はそうはならず、古いハンドルのままです。

ハンドルを変更するには、別の製品を作成する必要があるので、{{ all_products['product-handle'] }}は、製品にアクセスするためのかなり良い方法です。

私はこのようなことをします:

{% assign product = all_products['test-product-1'] %}
{% if product == blank %}
    <h1>No product found</h1>
{% else %}
    <h1>{{ product.title }}</h1>
{% endif %}
3
rogyvoje

あなたはこのようなことを試すことができます:

{% for product in collection.all_products %}
    {% if product.handle contains 'your-handle-name' %}
        // Do what you want here
    {% endif %}
{% endfor %}

すべての製品をループして(特定のコレクションをループすることもできます)、ifステートメントを使用して目的の製品を見つけることができます。

乾杯。

3
JCharette

私の知る限り、液体のハンドルで製品を取り出すことはできません。

それで私はいくつかの質問をします:なぜ最初に製品ハンドルのリストがあるのですか?それはどこから来たの?これらの製品をカスタムコレクションに入れることをお勧めします。そうすると、次のようにそれらを参照できます:{% collections['my-collections'] %}

1
David Underwood