Craft CMS でエントリをランダムに取得する

先日 @tamshow_ さんが、こんなツイートをされていました。

言われてみれば、ランダムなデータ取得も便利だと感じていたので、2つの方法をご紹介します。

MySQL の RAND() を利用する

ランダムにデータを取得する際、 order('RAND()') を利用する方法があります。
下記のサンプルでは、ハンドル名 products セクションに含まれる公開されているエントリをランダムに5件取得します。

{% set entries = craft.entries.section(['products']).order('RAND()').limit(5) %}

Craft CMS の shuffle() を利用する

ランダムなデータを取得する方法として、Craft CMS で用意されている shuffle() を利用することもできます。

{% set entries = shuffle(craft.entries.section(['products']).limit(5)) %}

なお、 shuffle() は引数にセットされた配列をシャッフルするため、Craft CMS のオブジェクトだけでなくテンプレートで独自に追加した配列を処理することも可能です。

参考:Functions | Templating Reference | Craft CMS
https://craftcms.com/docs/templating/functions#shuffle

まとめ

データを取得する際のフィルタ条件をテンプレートで柔軟に設定できるのも、Craft CMS の魅力の1つですね。

ここではエントリを例に挙げましたが、Matrix フィールドやカテゴリ、アセットなどでも同様に定義できますので、試してみてください。

参考:How can I return data from a Matrix field in random order? - Craft CMS Stack Exchange
https://craftcms.stackexchange.com/questions/92/how-can-i-return-data-from-a-matrix-field-in-random-order