Разбиение на страницы для простого цикла


У меня есть этот код, который просто отображает все сообщения для определенного автора:

<?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 на страницу. Я просмотрел официальный кодекс, но ничего из того, что я пробовал, не сработало.

Любая помощь приветствуется.

Author: user3256143, 2016-03-01

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.

Как создать саму разбивку на страницы, вы можете проверить в этих статьях: здесь и здесь.

 1
Author: pgk, 2016-03-01 08:57:43

Установка 'numberposts' => -1 означает получение всех записей. Вы должны установить для первых 10 записей (0-9 записей)

'numberposts'       => 10,
'offset'            => 0,

И для следующих 10 (10-19 записей)

'numberposts'       => 10,
'offset'            => 10,

И для следующих 10 (20-29 записей)

'numberposts'       => 10,
'offset'            => 20,
 0
Author: Thanga, 2016-03-01 08:32:33

Попробуйте этот рабочий код

Поместите эту функцию в 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(); ?>
 0
Author: Prakash Rao, 2016-03-01 08:54:01