doug
  • 0
Учитель

Показывать разное количество сообщений на странице в зависимости от контекста (например, домашняя страница, поиск, архив)

  • 0

В настройках чтения есть место для установки количества отображаемых сообщений, которое влияет на количество сообщений, отображаемых во всех контекстах. Вместо этого я хотел бы показать определенное количество сообщений на главной странице и другое количество сообщений на таких страницах, как архив, результаты поиска и т. д.

чтение-настройки-страниц-блог-показать-не более-на-страницу

Я понимаю, что могу сделать это, отредактировав файлы темы и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек. Давным-давно я наткнулся на плагин, который делал это, но сейчас не могу его найти.

Кто-нибудь знает плагин для этого или даже функцию, которую я мог бы добавить в functions.php для выполнения того же самого?

Share
  1. Вы, вероятно, имели в виду плагин @chip-bennett «Разные сообщения на странице»: chipbennett.net/plugins/cbnet-разные-сообщения-на-странице, который делает то, что вы хотите, в графическом виде.

    • 0
    • Я использую эту функцию на своем собственном сайте. Было легко вырезать и вставить это здесь для вас.

      • 0
    • Да, я упомянул об этом в своем вопросе. Я ищу способ сделать это, чтобы мне не приходилось редактировать несколько файлов темы, чтобы изменить настройки. Спасибо.

      • 0
    • Это довольно плохая идея, чтобы сделать это таким образом. WordPress уже выполняет запрос. Если вы добавите query_posts свою тему, вы проигнорируете исходный запрос и сделаете другой, избыточный.

      • 0
    • Джефф, я искал централизованное место для контроля количества сообщений, возвращаемых в разных контекстах. Ваш ответ делает это только в том случае, если вы используете index.php для обработки ВСЕХ контекстов, чего не делает большинство тем. В дополнение к увеличению количества обращений к базе данных (что влияет на производительность), ваша методика также может неожиданным образом изменить реакцию на условные теги (например, is_home() или is_front_page). Наконец, если вы хотите добавить вторичные циклы на страницу, вам НЕ следует использовать query_posts, а вместо этого используйте «новый WP_Query» (или get_posts).

      • 0
    • @doug это не вторичный цикл, он переопределяет основной цикл — и да, эта конкретная тема использует index.php для рендеринга всего, это довольно минималистично. Я чувствовал, что это имеет больше смысла здесь как ответ, но если вы хотите, я могу задать свой вопрос и ответить на него, если этот ответ вас каким-то образом оскорбит.

      • 0
    • На самом деле я неправильно прочитал ваш предпоследний абзац и подумал, что «большие» и «меньшие» списки сообщений находятся на одной странице, поэтому мое последнее предложение выше не имело значения. И да, вполне законно помещать весь свой код в index.php, если хотите. И если это так, то ваш метод — быстрый и простой способ сделать это, поэтому я уберу свой отрицательный голос после того, как 20-часовая блокировка закончится. Тем не менее, отправка нового запроса, а не изменение исходного запроса, как в ответе kevtrout, менее желательна по уже упомянутым причинам (вы, я и WP Codex).

      • 0
  2. Я считаю, что лучший способ сделать это в плагине — запустить следующий пример функции при обнаружении pre_get_posts хука действия. Объект $wp_query доступен, что означает, что ваши условные теги доступны, но до того, как WordPress получит сообщения, что означает, что вы меняете переменные запроса до запуска первого запроса, а не добавляете второй запрос, например, когда в теме используется query_posts() файл.

    function custom_posts_per_page($query) {
        if (is_home()) {
            $query->set('posts_per_page', 8);
        }
        if (is_search()) {
            $query->set('posts_per_page', -1);
        }
        if (is_archive()) {
            $query->set('posts_per_page', 25);
        } //endif
    } //function
    
    //this adds the function above to the 'pre_get_posts' action     
    add_action('pre_get_posts', 'custom_posts_per_page');
    
    • 0
  3. вы можете сделать собственный цикл, используя query_posts, и указать количество сообщений с помощью is_home, is_archive и т. д.

    просто простой оператор if вместе с query_posts

    • 0
  4. Чтобы добавить к этому вопросу. Кто-нибудь знает, как определить post_per_page для этой функции function custom_posts_per_page($query), если добавить новую страницу в index.php следующим образом:

    <?php
    if ($_GET['new'] == 1) 
    {
        include ( TEMPLATEPATH . '/newpage.php' );
        exit;
    }
    ?>
    
    • 0
  5. Я понимаю, что могу сделать это, отредактировав файлы темы и изменив там параметры запроса, но я бы предпочел иметь более легкий доступ к простой странице настроек.

    В интересах полноты я обнаружил, что query_posts в сочетании с $query_string конкатенацией работает хорошо.

    Я поместил этот код в index.php (в моей теме нет category.php)…

    <?php 
    if (!is_front_page()) { 
        query_posts($query_string . "&posts_per_page=20"); 
    }
    ?>
    

    Конечно, здесь мы изменяем внутреннюю строку запроса цикла, переопределяя количество сообщений на странице по умолчанию.

    Это удобно для предоставления меньшего списка сообщений на главной странице, где я показываю полные сообщения, и гораздо большего списка сообщений в других местах (категории, по дате и т. д.), где я показываю только резюме сообщений.

    Однако обратите внимание, что, в отличие от принятого ответа, запрос будет выполняться дважды, поэтому это не такое хорошее решение.

    • 0

Оставить ответ

You must login to add an answer.