@Cubeden_UA

Как сделать кастомные пагинации?

Я сделал пагинации но они выводятся почему-то не так как надо (я не сильно шарю в этой теме).
Вот пример моего кода:
<div class="video-list">
                    <?php
                    $args = array(
                        'post_type'      => 'videos',
                        'post_status'    => 'publish',
                        'posts_per_page' => 6,
                        'paged'          => get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1,
                    );

                    $query = new WP_Query( $args );

                    if ( $query->have_posts() ) {
                        while ( $query->have_posts() ) {
                            $query->the_post();
                            ?>
                            <div class="video-item" data-video-id="<?php echo carbon_get_the_post_meta('videos_code') ?>">
                                <div class="video-image" style="background-image: url('https://i.ytimg.com/vi/<?php echo carbon_get_the_post_meta('videos_code') ?>/hqdefault.jpg')"></div>
                                <h3><?php the_title(); ?></h3>
                                <p><?php the_excerpt(); ?></p>
                            </div>
                            <?php
                        }
                        wp_reset_postdata();
                    } else {
//                        echo 'Ничего не найдено';
                    }
                    ?>
                    <?php
                    echo '<div class="pagination">';
                    echo paginate_links( array(
                        'base'      => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
                        'format'    => '%1$s/%2$s %3$s',
                        'current'   => max( 1, get_query_var( 'paged' ) ),
                        'total'     => $query->max_num_pages,
                        'prev_text' => '&laquo; Previous',
                        'next_text' => 'Next &raquo;',
                    ) );
                    echo '</div>';
                    ?>
                </div>


Но оно выводит в подобном формате - 123Next »
То есть высвечивает номера всех страниц. А мне нужно сделать чтобы оно выводило так - 1/3Next »
То есть чтобы оно показывало страницу видосов на которых ты сейчас и косую линию / писало количество всех страниц.
То есть оно должно показывать сколько страниц и на какой странице ты сейчас из этих страниц.
Как это сделать?
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Никогда не копался во внутренностях вордпресса.
Но в вашем примере есть фрагменты, которые помогут собрать то, что вы хотите.
1. Вам нужна некая функция, которая будет получать href относительно текущего раздела, чтобы перейти на другую страницу этого же раздела. В которую мы будем передавать номер страницы, а получать на выходе url.
Вероятно, это оно:
esc_url( get_pagenum_link( 999999999 ))
2. Нам нужно получить текущий номер, страницы.
Наверное, это оно:
max( 1, get_query_var( 'paged' ) )
3. Нам нужно получить общее число страниц, наверное так:
$query->max_num_pages
4. Кроме чисел, нам нужно адаптивно выключать ссылки, когда следующей страницы нет (ссылка Next), и когда предыдущей страницы нет (ссылка Prev, вы как раз показали этот случай 1/3Next). Эти ситуации обрабатываются путем сравнения текущего номера страницы с единицей или макс. номером страницы.
Резюмируя эти предположения, можно получить вот такой код для генерации блока pagination:
$curent_page = max(1, get_query_var( 'paged' )); // текущий номер страницы
$max_page_num = $query->max_num_pages; // общее количество страниц
$prev_page_num =  $curent_page - 1 > 0 ? $curent_page  - 1 : null; // номер следующей страницы, если ее нет, то null
$next_page_num = $curent_page + 1 < $max_page_num ? $curent_page + 1 : null;  //номер предыдущей страницы, если ее нет, то null
$prev_page_link = is_null($prev_page_num) ? null : esc_url( get_pagenum_link($prev_page_num));  //ссылка на следующую страницу, если ее нет, то null
$next_page_link = is_null($next_page_num) ? null : esc_url( get_pagenum_link($next_page_num)); //ссылка на предыдущую страницу, если ее нет, то null
echo '<div class="pagination">'
.(is_null($prev_page_num) ? '' : '<a href="'.$prev_page_link .'">Prev</a> ')
.$curent_page.'/'.$max_page_num
.(is_null($next_page_num) ? '' : '<a href="'.$next_page_link .'">Next</a> ')
.'</div>';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы