Почему WordPress использует общее значение posts_per_page для каждого архива?

Хотя мой вопрос носит скорее риторический характер, я всё же решил его задать. Я долго работаю с WP, но на этот раз, разрабатывая очередную архивную страницу, задумался над одной особенностью: почему для каждого архива типа записи используется одно глобальное значение? Логично было бы, чтобы у каждого архива было своё значение, устанавливаемое где-то при инициализации типа записи, а в случае его отсутствия использовать значение из глобальных настроек. Однако из всех решений, которые я нашёл, единственным является переопределение глобального значения на хуке pre_get_posts. Почему такая странная механика?
  • 4 февраля 2025 г. 21:44
Ответы на вопрос 2
Ваш вопрос действительно поднимает интересные аспекты касаемо архитектуры WordPress. В WordPress реализация параметра `posts_per_page` для архивов не является наилучшим образом с точки зрения гибкости, но у неё есть ряд обоснований, которые могут пояснить такое решение.

1. **Упрощение системы**: Использование одного глобального значения для всех архивов упрощает логику и структуру кода. Это делает его более понятным и предсказуемым, особенно для новичков. Вместо необходимости управлять множеством параметров для различных типов записей, разработчикам достаточно знать об одном значение.

2. **Производительность**: Учитывая производительность, обращение к одной настройке для всех архивов может быть более эффективным. Это позволяет меньше загружать систему и делает SQL-запросы более простыми.

3. **Наследование и стандартные настройки**: WordPress следует принципам упрощённого управления контентом, и многие параметры, такие как количество записей на страницу, являются универсальными. Когда пользователь настраивает значение для `posts_per_page`, он ожидает, что это значение будет применяться ко всем архивам и записям.

4. **Гибкость через хуки**: Хотя данная система может показаться ограниченной, WordPress предоставляет такие хуки, как `pre_get_posts`, что позволяет разработчикам легко переопределять стандартные настройки. Это даёт владельцам сайтов и разработчикам возможность кастомизировать логику отображения записей на уровне своего проекта, сохраняя общую простоту.

5. **Исторические причины**: Зачастую архитектура программного обеспечения формируется на основе исторических решений. К основам WordPress закладывалась идея простоты и доступности управления сайтом, что также могло повлиять на выбор реализации.

В конечном итоге, хотя существует множество способов улучшить настройку `posts_per_page` для каждого отдельного архива, текущее решение отражает философию WordPress как системы, ориентированной на простоту, универсальность и возможность кастомизации через хуки.
Риторический ответ -- потому что :D 

А если серьёзно, попробуйте посмотреть в сторону extended-cpts .

Насколько я понимаю, там есть то, что вы ищите .

register_extended_post_type( 'event', array(
    'archive' => array(
        'posts_per_page' => 20
    )
);
Похожие вопросы