Продолжу тему фильтра в Jekyll (предыдущий пост описывал применение Liquid Filters - where).

Попробуем применить фильтр where_exp.

Допустим имеем страницу с информацией о книге с параметрами:

---
layout: book-page
categories: books
author: Айзек Азимов
title: Я, робот
tags: [Айзек Азимов]
image: "img/books/aizek-azimov/ya-robot.jpg"
permalink: ":categories/:year-:month-:day-:slug.html"
rating: 7
---

При выводе данной страницы на экран, необходимо вывести блок с книгами того же автора, но без книги со страницы.

Пишем конструкцию:

{% assign author_posts = site.categories.books | where: "author", page.author | where_exp: "item", "item.title != page.title" %}
{% if author_posts != empty %}
<h3 class="text-center title-container">Книги автора</h3>
<div class="row">
  {% for post in author_posts %}
    {% include /books-item.html %}
  {% endfor %}
</div>
{% endif %}

Строкой:

{% assign author_posts = site.categories.books | where: "author", page.author | where_exp: "item", "item.title != page.title" %}

осуществляем выборку из страниц категории books, при этом осуществляем фильтр (where) по полю author - берем данные открытой страницы page.author. Делаем проверку (where_exp) по заголовку - если заголовок страницы (page.title) и заголовок отобранного материала (item.title) не совпадают, формируем массив author_posts.

Затем проверяем массив на существование:

{% if author_posts != empty %}

Если данных нет, отображать ничего не будем.

Пример работы фильтра можно увидеть в блоке "Книги автора".