В настройках чтения есть место для установки количества отображаемых сообщений, которое влияет на количество сообщений, отображаемых во всех контекстах. Вместо этого я хотел бы показать определенное количество сообщений на главной странице и другое количество сообщений на таких страницах, как архив, результаты поиска и т. д.
Я понимаю, что могу сделать это, отредактировав файлы темы и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек. Давным-давно я наткнулся на плагин, который делал это, но сейчас не могу его найти.
Кто-нибудь знает плагин для этого или даже функцию, которую я мог бы добавить в functions.php для выполнения того же самого?
Вы, вероятно, имели в виду плагин @chip-bennett «Разные сообщения на странице»: chipbennett.net/plugins/cbnet-разные-сообщения-на-странице, который делает то, что вы хотите, в графическом виде.
Я использую эту функцию на своем собственном сайте. Было легко вырезать и вставить это здесь для вас.
Да, я упомянул об этом в своем вопросе. Я ищу способ сделать это, чтобы мне не приходилось редактировать несколько файлов темы, чтобы изменить настройки. Спасибо.
Это довольно плохая идея, чтобы сделать это таким образом. WordPress уже выполняет запрос. Если вы добавите
query_posts
свою тему, вы проигнорируете исходный запрос и сделаете другой, избыточный.Джефф, я искал централизованное место для контроля количества сообщений, возвращаемых в разных контекстах. Ваш ответ делает это только в том случае, если вы используете index.php для обработки ВСЕХ контекстов, чего не делает большинство тем. В дополнение к увеличению количества обращений к базе данных (что влияет на производительность), ваша методика также может неожиданным образом изменить реакцию на условные теги (например, is_home() или is_front_page). Наконец, если вы хотите добавить вторичные циклы на страницу, вам НЕ следует использовать query_posts, а вместо этого используйте «новый WP_Query» (или get_posts).
@doug это не вторичный цикл, он переопределяет основной цикл — и да, эта конкретная тема использует index.php для рендеринга всего, это довольно минималистично. Я чувствовал, что это имеет больше смысла здесь как ответ, но если вы хотите, я могу задать свой вопрос и ответить на него, если этот ответ вас каким-то образом оскорбит.
На самом деле я неправильно прочитал ваш предпоследний абзац и подумал, что «большие» и «меньшие» списки сообщений находятся на одной странице, поэтому мое последнее предложение выше не имело значения. И да, вполне законно помещать весь свой код в index.php, если хотите. И если это так, то ваш метод — быстрый и простой способ сделать это, поэтому я уберу свой отрицательный голос после того, как 20-часовая блокировка закончится. Тем не менее, отправка нового запроса, а не изменение исходного запроса, как в ответе kevtrout, менее желательна по уже упомянутым причинам (вы, я и WP Codex).
Я считаю, что лучший способ сделать это в плагине — запустить следующий пример функции при обнаружении
pre_get_posts
хука действия. Объект$wp_query
доступен, что означает, что ваши условные теги доступны, но до того, как WordPress получит сообщения, что означает, что вы меняете переменные запроса до запуска первого запроса, а не добавляете второй запрос, например, когда в теме используется query_posts() файл.вы можете сделать собственный цикл, используя query_posts, и указать количество сообщений с помощью is_home, is_archive и т. д.
просто простой оператор if вместе с query_posts
Чтобы добавить к этому вопросу. Кто-нибудь знает, как определить post_per_page для этой функции function custom_posts_per_page($query), если добавить новую страницу в index.php следующим образом:
В интересах полноты я обнаружил, что
query_posts
в сочетании с$query_string
конкатенацией работает хорошо.Я поместил этот код в
index.php
(в моей теме нет category.php)…Конечно, здесь мы изменяем внутреннюю строку запроса цикла, переопределяя количество сообщений на странице по умолчанию.
Это удобно для предоставления меньшего списка сообщений на главной странице, где я показываю полные сообщения, и гораздо большего списка сообщений в других местах (категории, по дате и т. д.), где я показываю только резюме сообщений.
Однако обратите внимание, что, в отличие от принятого ответа, запрос будет выполняться дважды, поэтому это не такое хорошее решение.