P0jar

Постраничная навигация. Как создать?

    6 сообщений в этой теме

    Помогите, пожалуйста, добавить постраничную навигацию на сайт. Обычный шаблон, созданный мною на основе Bootstrap, самый базовый WP функционал. Однако, проблема, ни одна навигация не хочет работать. Будь-то плагин, будь-то "официальный код" или же самопальная функция wp-kama.

    Может кто сталкивался с подобным или же имеет в рукаве альтернативные варианты? Помогите пожалуйста. Любой нужно код оперативно выложу. 

    <?php get_header(); ?>
    <div class="col-xs-12 col-sm-8 col-md-8 text">
        <h2 class="static_title">Новости</h2>
    <?php
    query_posts('posts_per_page=20');
    if(have_posts()){ while(have_posts()){ the_post(); ?>
    <article>
        <header><h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1></header> <!--Заголовок самой статьи, cсылка ведёт на single.php-->
      <p class="review"><?php the_content(); ?></p>
    <?php }}
    else echo 'Записей нет';
    ?> 
    </article>
    </div>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Код на index.php 

    Внизу, после </article> думаю добавить постраничную.

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

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    всмысле конфликт с query_post вам не так нужно сделать.

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

    можете попробовать трюк сделать.  https://wp-kama.ru/hook/post_limits

    что то типа такого

    add_filter( 'post_limits', 'editLimitForTaxonomy' );
    function editLimitForTaxonomy( $limit,  $query ) {
       if (!is_admin()){
          if ( $query->query_vars['taxonomy'] == 'ВАША ТАКСОНОМИЯ' ){
             $limit = 'LIMIT 20';
          }
       } 
            return $limit;
    }

    конкретно этот хук я не использовал. использовал подобные, поэтому второй параметр query там имеет место быть

    сам query_posts уберите.  он и так вызывается в категориях и таксономиях

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

    если не получится то там уже смотреть нужно что это. баг или нет.

    на крайний случай - заюзайте просто WP_Query 

    а вообще - количество постов для обычных категорий устанавливается в настройках->чтение, это так к слову

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    Параметр paged передается? Если не хочется заморачиваться, можно поставить плагин WP Pagenavi, который умеет генерить ссылки для навигации. Просто где-нибудь внизу/вверху страницы добавить код а-ля:

    <?php if ( function_exists('wp_pagenavi') ) wp_pagenavi(); ?>

    posts_per_page указывается в настройках Settings > Reading, если нужно изменить количество постов для какого-то конкретного архива, можно использовать фильтр pre_get_posts чтобы не обращаться к БД повторно.

    Вышеописанное актуально для стандартных циклов (Loop)

    9 часов назад, Николя223 сказал:

    можете попробовать трюк сделать.  https://wp-kama.ru/hook/post_limits

    что то типа такого

    
    add_filter( 'post_limits', 'editLimitForTaxonomy' );
    function editLimitForTaxonomy( $limit,  $query ) {
       if (!is_admin()){
          if ( $query->query_vars['taxonomy'] == 'ВАША ТАКСОНОМИЯ' ){
             $limit = 'LIMIT 20';
          }
       } 
            return $limit;
    }

     

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

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    Я сталкивался с такой проблемой.

    он пишет о том что не работает wp_pagenavi()

    так как он перезатирает предыдущий запрос.  

    2 часа назад, hedgehog сказал:

    использовать фильтр pre_get_posts чтобы не обращаться к БД повторно.

    А вам не кажется что вы предлагаете тоже самое только с другого ракурса?)

    позже напишу как можно сделать

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах
    3 часа назад, Николя223 сказал:

    позже напишу как можно сделать

    С нетерпением жду.

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах
    В 1/24/2017 в 16:07, Николя223 сказал:

    А вам не кажется что вы предлагаете тоже самое только с другого ракурса?)

    Не кажется. Подменять raw query это крайний случай, когда нет других способов. Тем более, в вашем примере лимиты указаны неправильно - будут показываться все те же 20 постов каждый раз, на любой странице, см LIMIT: https://dev.mysql.com/doc/refman/5.7/en/select.html

     

    В 1/24/2017 в 16:07, Николя223 сказал:

    Я сталкивался с такой проблемой.

    он пишет о том что не работает wp_pagenavi()

    так как он перезатирает предыдущий запрос.

    А конкретнее - потому что в новый запрос не передается "paged" поэтому он всегда отображает последние 20 постов. А передавать этот параметр в этом конкретном случае особого смысла нет: в некоторых случаях будет 404я ошибка, например если значение posts_per_page в новом запросе меньше, чем в оригинальном запросе.

    Задача простая: задать posts_per_page ДО выполнения основного запроса. Либо указав значение в Settings>Readings, либо используя тот же pre_get_posts (если нужно изменить только для конкретного случая, например для отображения терминов в таксономии book)

    Пример для таксономии book:

    add_action('pre_get_posts', 'posts_per_book_tax_page');
    
    function posts_per_book_tax_page($query) {
            if ( is_admin() || !$query->is_main_query() )
                    return;
    
            if ( $query->is_tax('book') )
                    $query->set('posts_per_page', 20);
    }

    Больше про Conditional Tags (а-ля is_tax): https://codex.wordpress.org/Conditional_Tags

    PS: Проверкa на is_main_query() ОБЯЗАТЕЛЬНА.

    PPS: кстати, в 4.1 добавили свою функцию: the_posts_pagination

    Главный вопрос: вся эта музыка с лимитом 20 постов на страницу - затевается для ВСЕХ страниц, или для конкретных? Если для конкретных - то для каких (категории, теги, иные архивы)?

    Поделиться сообщением


    Ссылка на сообщение
    Поделиться на других сайтах

    Создайте аккаунт или войдите в него для комментирования

    Вы должны быть пользователем, чтобы оставить комментарий

    Создать аккаунт

    Зарегистрируйтесь для получения аккаунта. Это просто!


    Зарегистрировать аккаунт

    Войти

    Уже зарегистрированы? Войдите здесь.


    Войти сейчас