Если вы пользуетесь плагином Custom post types, может возникнуть такая ситуация, что стандартная пагинация не будет работать. Именно так у меня приключилось с одним сайтом. Не знаю, возможно нужно было просто обновить движок и все бы заработало, но сайт был сделан очень давно, и при обновлении движка до 5-ой версии частично переставал работать. Так что пришлось помогать стандартной функции правильно рисовать пагинацию.
Как правило для вывода кастомных постов создается шаблон, в котором посредством цикла выводится содержимое поста:
1 2 3 4 5 6 7 8 9 10 |
$args = array( 'post_type' => 'gallery', 'orderby' => 'date', 'order' => 'DESC' , 'posts_per_page' => '-1'); query_posts($args); if (have_posts()): while (have_posts()): the_post(); endwhile; endif; wp_reset_query(); |
За пагинацию отвечает функция the_posts_pagination(); которая выводит и управляет постраничным показом. В моем случае сам html код пагинции выводился, но сама она не работала. Пришлось вычленять из адресной строки браузера адрес текущей страницы пагинации и на его основе строить запрос информации о постах к базе данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php /* Логика пагинации */ $pagenum_link = html_entity_decode($_SERVER['REQUEST_URI']); /*Часть url: /test/page/2/ */ $pagenum_link = substr($pagenum_link, 1, -1); /*Часть url: test/page/2 (обрезаем первый и последний слэши)*/ $query_argss = array(); $url_parts = explode( '/', $pagenum_link ); /*Массив: [0]=>'test, [1]=>page', [2]=>номер страницы*/ $posts_perr_page = 2; //Постов на странице if ( isset( $url_parts[1] ) ) { $posts_to_skip = ($url_parts[2] - 1)*$posts_perr_page; // Считаем сколько постов пропустить } else { $posts_to_skip = 0; } /* Логика пагинации */ $query_args = array( 'post_type' => 'afisha', 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' => $posts_perr_page, 'paged' => $paged, 'offset' => $posts_to_skip ); $custom_post_type = new WP_Query( $query_args ); $wp_query = $custom_post_type; if ( $custom_post_type->have_posts() ) : while ( $custom_post_type->have_posts() ) : $custom_post_type->the_post(); ?> <!-- Здесь выводим содержимое постов --> <?php endwhile; /*Редактируем оформление пагинации*/ add_filter('navigation_markup_template', 'my_navigation_template', 10, 2 ); function my_navigation_template( $template, $class ){ /* Вид базового шаблона: <nav class="navigation %1$s" role="navigation"> <h2 class="screen-reader-text">%2$s</h2> <div class="nav-links">%3$s</div> </nav> */ return ' <center> <nav class="navigation %1$s" role="navigation"> <div class="nav-links">%3$s</div> </nav> </center> '; } /*Редактируем оформление пагинации*/ the_posts_pagination(); endif; wp_reset_postdata(); ?> |
Оставить комментарий