Фрейм page-feed
Лента страниц карточками: картинка, раздел, дата, заголовок, выдержка. Один фрейм закрывает три места — каталог раздела, «Больше по теме» под записью и ленту последних на главной. Данные — системный источник pages.children, своих наборов не нужно: новая страница попадает в ленты сама.
| Где стоит | вызывается из тела страницы |
| Что читает | pages.children, page.paged, page.parent_url, page.parent_title, наборы header (next_label, back_label) и footer (empty_section) |
| Что вкладывает | page-feed__card, page-feed__pager |
| Библиотека | системный фрейм эталона; ставится на сайт POST /frames/system/page-feed/install |
Вызовы
<!-- каталог раздела: дети страницы, свежие первыми, по 9, разбивка ?blog_page=N -->
<!-- onpress/frame {"name":"page-feed"} /-->
<!-- главная: последние записи сайта, кроме самой главной и страниц верхнего уровня -->
<!-- onpress/frame {"name":"page-feed","parent":"any","exclude_current":"1"} /-->
<!-- под записью: «Больше по теме «Раздел»», четыре соседа без самой записи -->
<!-- onpress/frame {"name":"page-feed--related"} /-->
Параметры parent и exclude_current уходят в выборку pages.children и в разбивку — смысл тот же, что у атрибутов повторителя.
Что выводится
- Есть карточки —
section.wp-block-onpress-blog-pagination-01с сеткой.blog-pag__gridи разбивкойnav.blog-pag__pager(номера с пропусками, «далее», на последней странице — «назад»; одна страница — разбивки нет). Подписи «далее» и «назад» — поляnext_labelиback_labelнабораheader. - Карточек нет —
section.blog-pag--emptyс текстом из поляempty_sectionнабораfooter, без него — «В этом разделе пока нет статей — скоро появятся.». - Карточка:
article.blog-pag__card.blog-pag__card--rich, без картинки — с модификатором--no-thumb. Картинка —<picture>с WebP и 1x/2x (биндpicture), раздел — пилюляa.blog-pag__pill, дата —time.blog-pag__date, заголовок —a.blog-pag__title, выдержка —p.blog-pag__excerpt, если она есть.
Классы и разметка совпадают с прежним блоком ленты onpress/blog-pagination-01, поэтому стили сайтов, писанные под него, работают без правок. Свой style.css фрейма задаёт базовый вид с нулевой специфичностью (:where(…)) — любое правило сайта сильнее.
Фрейм page-feed--related
<section class="wp-block-onpress-blog-pagination-01 blog-pag--related relative">
<div class="blocks-container">
<div class="blog-pag__heading typo-h3">Больше по теме «<a class="blog-pag__heading-link" data-op-bind='{"href":"page.parent_url","text":"page.parent_title"}'></a>»</div>
<div class="blog-pag__grid">
<!-- onpress/repeat {"source":"pages.children","parent":"parent","sort":"date","exclude_current":true,"limit":4,"empty":"frame"} -->
<!-- onpress/frame {"name":"page-feed__card"} /-->
<!-- /onpress/repeat -->
</div>
</div>
</section>
Соседей нет — блока нет вовсе ("empty":"frame"). Заголовок записан во фрейме по-русски: на другом языке сделайте свою копию.
Когда лента обновляется
Ленты собираются на запросе страницы, копий у них нет. Публикация, правка и снятие страницы — и через API, и в админке — снимают страничный кэш у её раздела, до 50 свежих соседей и главной: их ленты показывают её карточку.