Как создать пагинацию для комментариев по странично ?
Мне необходимо что б на странице кастомного типа записи выводилась кастомная форма отображения списка комментариев с пагинацией.
На других типах записи используеться пагинация других видов, для страниц, поэтому пишем в отдельном шаблоне миную comments.php
Благодаря вот этой статье get_query_var() Был написан вот такой код с параметрами cpage
custom-comments-template.php
<?php if (post_password_required()) {
return;
}
$per_page = 4;
$page = get_query_var('cpage') ?: 1;
?>
<div id="comments" class="company-rewiew-list">
<h1>Per page = <?php echo $per_page?></h1>
<h2>Page - <?php echo $page?></h2>
<?php
wp_list_comments(array(
'type' => 'comment',
'reverse_top_level' => false, // Отключите сортировку родительских комментариев от старых к новым
'reverse_children' => false, // Включите сортировку ответов на родительские комментарии от новых к старым
'callback' => 'reviews_theme_comment',
'per_page' => $per_page,
'cpage' => $page,
)); ?>
</div>
<?php
/// Pagination
if ($per_page > 1){
$custom_pagination_template = locate_template('template-parts/custom-comments-pagination.php');
if ($custom_pagination_template) {
include $custom_pagination_template;
}
}
?>
Сам же фаил пагинации custom-comments-pagination.php выглядит так
<div class="company-rewiew-pagination">
<?php
$args = array(
'post_id' => get_the_ID(), // Идентификатор текущего поста
'parent' => 0, // Только родительские комментарии
'count' => true, // Запрос для получения количества комментариев
);
$top_level_comments_count = get_comments($args);
$max_pages = ceil($top_level_comments_count / $per_page);
$args = array(
'screen_reader_text' => __('Comments navigation'),
'aria_label' => __('Comments'),
'class' => 'comments-pagination',
'base' => add_query_arg('cpage', '%#%'),
'format' => '',
'total' => $max_pages,
'current' => $page,
'add_fragment' => '',
'prev_text' => '❮',
'next_text' => '❯',
'type' => 'list',
);
echo get_the_comments_pagination($args);
?>
</div>
<p>Page value <?php echo $page; ?></p>
<p>Max Pages <?php echo $max_pages; ?></p>
<p>$top_level_comments_count <?php echo $top_level_comments_count; ?></p>

Проблема в том, что я не понимаю, почему изначально меня брасает на "5" страницу (хотя если у меня 9 комментариев на странице 1го уровня а я задаю $per_page = 4; то должно быть максимум 3 и начинать должно с 1 страницы...), откуда это ? Как правильно задавать значение переменной $page = get_query_var('cpage') ?: 1; ?
Пробовал и так задавать $page = max(1, get_query_var('cpage')); не помогло.
Вот нашел ответ на свой вопрос. Что б сделать пагинацию для комментариеы. Может кому понадобится
<?php if (post_password_required()) { return; } $post_id = get_the_ID(); $per_page = 4; $comments_count = get_comments_number($post_id); if (isset($_GET['cpage']) && is_numeric($_GET['cpage'])) { $page = (int)$_GET['cpage']; } $page = max(1, $page); ?> <div id="comments" class="company-rewiew-list"> <?php wp_list_comments(array( 'type' => 'comment', 'reverse_top_level' => false, // Отключите сортировку родительских комментариев от старых к новым 'reverse_children' => false, // Включите сортировку ответов на родительские комментарии от новых к старым 'callback' => 'reviews_theme_comment', 'per_page' => $per_page, 'cpage' => $page, )); ?> </div> <?php /// Pagination if (($per_page > 1) && ($comments_count > $per_page)) { include locate_template('template-parts/custom-comments-pagination.php'); } ?>а пагинация выглядит так
<?php $args = array( 'post_id' => get_the_ID(), // Идентификатор текущего поста 'parent' => 0, // Только родительские комментарии 'count' => true, // Запрос для получения количества комментариев ); $top_level_comments_count = get_comments($args); $max_pages = ceil($top_level_comments_count / $per_page); $args = array( 'screen_reader_text' => __('Comments navigation'), 'aria_label' => __('Comments'), 'class' => 'comments-pagination', 'format' => '', 'total' => $max_pages, 'current' => $page, 'prev_text' => '❮', 'next_text' => '❯', 'type' => 'list', 'echo' => false, // Установите это значение в false ); $pagination = get_the_comments_pagination($args); $pagination = str_replace('#comments', '', $pagination); ?> <div class="company-rewiew-pagination"> <?php echo $pagination; ?> </div>