Разбиение на страницы для простого цикла
У меня есть этот код, который просто отображает все сообщения для определенного автора:
<?php
$all_active_tasks = get_posts(array(
'numberposts' => -1,
'offset' => 0,
'post_status' => 'publish',
'author' => '1',
'post_type' => 'post'
)
);
foreach($all_active_tasks as $post) :
$category = get_the_category();
setup_postdata($post);
?>
<div class="the-post">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php echo $category[0]->cat_name; ?></p>
</div>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
Но чего я не могу понять, так это как разбить результаты на страницы, чтобы сказать 10 на страницу. Я просмотрел официальный кодекс, но ничего из того, что я пробовал, не сработало.
Любая помощь приветствуется.
3 answers
Вы можете использовать paged
вместе с параметрами posts_per_page
. Запрос WP_. Вы можете захватить текущую страницу следующим образом:
$paged = get_query_var( 'paged' ) ?: ( get_query_var( 'page' ) ?: 1 );
А затем используйте его в своем запросе:
$all_active_tasks = get_posts(array(
'posts_per_page' => 10,
'post_status' => 'publish',
'author' => '1',
'post_type' => 'post',
'paged' => $paged
));
Таким образом, если вы поставите /page/2/
в конце своего URL-адреса, запрос вернет сообщения с 11 по 20.
Как создать саму разбивку на страницы, вы можете проверить в этих статьях: здесь и здесь.
Установка 'numberposts' => -1
означает получение всех записей. Вы должны установить для первых 10 записей (0-9 записей)
'numberposts' => 10,
'offset' => 0,
И для следующих 10 (10-19 записей)
'numberposts' => 10,
'offset' => 10,
И для следующих 10 (20-29 записей)
'numberposts' => 10,
'offset' => 20,
Попробуйте этот рабочий код
Поместите эту функцию в functions.php файл вашей активной темы
function custom_pagination($numpages = '', $pagerange = '', $paged='') {
if (empty($pagerange)) {
$pagerange = 2;
}
global $paged;
if (empty($paged)) {
$paged = 1;
}
if ($numpages == '') {
global $wp_query;
$numpages = $wp_query->max_num_pages;
if(!$numpages) {
$numpages = 1;
}
}
$pagination_args = array(
'base' => get_pagenum_link(1) . '%_%',
'format' => 'page/%#%',
'total' => $numpages,
'current' => $paged,
'show_all' => False,
'end_size' => 1,
'mid_size' => $pagerange,
'prev_next' => True,
'prev_text' => __('<i class="fa fa-angle-double-left"></i>'),
'next_text' => __('<i class="fa fa-angle-double-right"></i>'),
'type' => 'plain',
'add_args' => false,
'add_fragment' => ''
);
$paginate_links = paginate_links($pagination_args);
if ($paginate_links) {
echo "<div class='col-md-12'><nav class='custom-pagination pagination'>";
echo $paginate_links;
echo "</nav></div>";
}
}
И вот ваш измененный код для работы с разбиением на страницы
<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$all_active_tasks = get_posts(array(
'posts_per_page' => -1,
'paged' => $paged,
'offset' => 0,
'post_status' => 'publish',
'author' => '1',
'post_type' => 'post'
)
);
foreach($all_active_tasks as $post) :
$category = get_the_category();
setup_postdata($post);
?>
<div class="the-post">
<h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p><?php echo $category[0]->cat_name; ?></p>
</div>
<?php endforeach; ?>
<?php if (function_exists(custom_pagination)) {
custom_pagination(count($all_active_tasks),"",$paged);
}?>
<?php wp_reset_postdata(); ?>