Intereting Posts

пейджинг работает неправильно на странице архивов новостей

Мне нужен пейджинг на странице архивов новостей. Данные поступают правильно, если отображать все записи на одной странице. Но если я добавлю пейджинговый код, то значения разбиения на страницы (например, 1,2,3, … 16) будут поступать правильно, но если я нажму на страницу 2, тогда отобразится тот же заголовок, что и на странице 1.

<h1 style="margin-left:10px;">News</h1> <ul class="years"> <?php $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; $all_posts = get_posts(array( 'post_type' => 'news', 'posts_per_page' => 20, 'orderby' => 'date', 'order' => 'DESC', 'paged='. $paged, )); // this variable will contain all the posts in a associative array // with three levels, for every year, month and posts. $ordered_posts = array(); foreach ($all_posts as $single) { $year = mysql2date('Y', $single->post_date); $month = mysql2date('F', $single->post_date); // specifies the position of the current post $ordered_posts[$year][$month][] = $single; } // iterates the years foreach ($ordered_posts as $year => $months) { ?> <li> <h3><?php echo $year ?></h3> <ul class="months"> <?php foreach ($months as $month => $posts ) { // iterates the moths ?> <li> <h3><?php printf("%s (%d)", $month, count($months[$month])) ?></h3> <ul class="posts"> <?php foreach ($posts as $single ) { // iterates the posts ?> <li> <?php echo mysql2date('F j', $single->post_date) ?> <a href="<?php echo get_permalink($single->ID); ?>"><?php echo get_the_title($single->ID); ?></a> (<?php echo $single->comment_count ?>)</li> </li> <?php } // ends foreach $posts ?> </ul> <!-- ul.posts --> </li> <?php } // ends foreach for $months ?> </ul> <!-- ul.months --> <?php if(function_exists('wp_paginate')) { wp_paginate(); } ?> </li> <?php } // ends foreach for $ordered_posts ?> </ul><!-- ul.years --> 

вот скриншот: – введите описание изображения здесь

Используя пользовательские get_posts() вы игнорируете $paged var. Таким образом, вы увидите всегда сообщения с первой страницы.

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

 function my_post_queries( $query ) { if (!is_admin() && $query->is_main_query()){ $query->set('posts_per_page', 10); $query->set('post_type', array('news')); $query->set('orderby', 'date'); $query->set('order', 'DESC'); } } add_action( 'pre_get_posts', 'my_post_queries' ); 

Таким образом, $paged var поддерживается из основного запроса.

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