Использование paginate_links() для генерации пагинации вида "1, 2, 3 ... 10, 20, 30, 40... 55"

12 нояб. 2011 г., 21:08:36
Просмотры: 30.5K
Голосов: 3

Я нашел этот код:

    // Получаем общее количество страниц
    global $wp_query;
    $total = $wp_query->max_num_pages;
    // Пагинация только если у нас больше одной страницы
    if ( $total > 1 )  {
         // Получаем текущую страницу
         if ( !$current_page = get_query_var('paged') )
              $current_page = 1;
         // Структура "format" зависит от того, используем ли мы красивые постоянные ссылки
        $permalinks = get_option('permalink_structure');
        $format = empty( $permalinks ) ? '&page=%#%' : 'page/%#%/';
        echo paginate_links(array(
              'base' => get_pagenum_link(1) . '%_%',
              'format' => $format,
              'current' => $current_page,
              'total' => $total,
              'mid_size' => 2,
              'type' => 'list'
        ));
    }

Это работает нормально, но генерирует пагинацию вида "1, 2, 3 ... ПОСЛЕДНЯЯ_СТРАНИЦА", я видел плагины, которые генерируют пагинацию вида "1, 2, 3... 19, 20, 30 ... ПОСЛЕДНЯЯ_СТРАНИЦА".

Можно ли этого достичь, используя функцию paginate_links()?

Я не хочу добавлять плагин только ради такой небольшой модификации.

0
Все ответы на вопрос 4
0

Функция paginate_links() делает это по умолчанию. Управляющий параметр — mid_size, который определяет количество ссылок на страницы вокруг текущей страницы для отображения. Значение по умолчанию — 2.

Это означает, что если у вас 12 страниц, а текущая страница — Страница 1, пагинация будет выглядеть так:

1 2 3 ... 12

Но если текущая страница — Страница 6, пагинация примет вид:

1 ... 4 5 6 7 8 ... 12

Возможно, я ошибаюсь, но, кажется, именно так работают большинство плагинов для пагинации.

Редактирование

Извините, я сначала неправильно понял ваш вопрос и не уловил, что вы хотите выводить каждую десятую страницу в ваших ссылках пагинации.

У этой функции нет встроенного параметра для такого поведения. Лучший вариант — установить 'show_all' в true, изменить 'type' на 'array', а затем вручную сформировать вывод, перебирая значения массива.

5 апр. 2012 г. 02:28:04
0

http://codex.wordpress.org/Function_Reference/paginate_links

То, что вам нужно, это параметр 'end_size' - добавьте его в массив аргументов с нужным вам значением.

27 февр. 2012 г. 13:32:55
1
$paged = (get_query_var('page')) ? get_query_var('page') : 1;

$args= new WP_Query(array(
        'post_type'=>'card', // тип записи - карточки
        'posts_per_page' => 6, // количество записей на странице
        'paged' => $paged, // текущая страница
    ));  


    if($args->have_posts()) :

        while($args->have_posts())  : $args->the_post();

        $permalink=get_the_permalink(get_the_ID()); // получаем постоянную ссылку
        $title=get_the_title(); // получаем заголовок

        echo '<div class="col-md-4 card-details"><a href="'.$permalink.'">';
        echo '<div class="card-img">';the_post_thumbnail('thumbnail');echo '</div>'; // миниатюра записи
        echo '<div class="card-title"><h4>'.$title.'</h4></a>';
        echo'</div>';
        echo '</div>';

        endwhile;

        $total_pages = $args->max_num_pages; // общее количество страниц

        ?>

        <div class="greetings-pagination col-md-12">

        <?php

        if ($total_pages > 1){

            $current_page = max(1, get_query_var('page')); // текущая страница

            echo paginate_links(array(
                'base' => get_pagenum_link(1) . '%_%', // базовый URL
                'format' => '/page/%#%', // формат URL
                'current' => $current_page, // текущая страница
                'total' => $total_pages, // всего страниц
                'prev_text'    => __('назад'), // текст "назад"
                'next_text'    => __('вперед'), // текст "вперед"
            ));
        }

    ?>  

    </div>

    <?php else :?>
    <h3><?php _e('Ошибка 404: Страница не найдена', ''); ?></h3>
    <?php endif; ?>
    <?php wp_reset_postdata();?> // сброс данных запроса
17 апр. 2017 г. 12:12:17
Комментарии

Просто скопируйте код, включая две верхние строки, и вы получите пагинацию для пользовательского типа записи. Вот и всё.

MZK MZK
17 апр. 2017 г. 12:19:57
0

На сайте разработчиков WordPress действительно упоминаются некоторые параметры. Вот страница, посвящённая этой функции. Вы можете проверить параметр 'end_size' для получения дополнительной информации.

У меня остаётся вопрос. Я использую <?php echo paginate_links(); ?> в шаблоне своей темы, и это прекрасно работает (как показано на изображении).Пример работы пагинации в WordPress

Но я не уверен, не вызовет ли это других проблем.

14 нояб. 2017 г. 18:41:18