Не работает paginate_comments_links ()

Я использую paginate_comments_links (), чтобы получить все комментарии от текущего пользователя:

<?php global $current_user; get_currentuserinfo(); $userid = $current_user->ID; $args = array( 'user_id' => $userid, 'number' => 2, ); $comments = get_comments($args); foreach($comments as $comment) : echo('<br />' . $comment->comment_date . '<br />' . $comment->comment_content); endforeach; paginate_comments_links(); ?> 

Однако разбиение на страницы не отображается. Я опубликовал 7 комментариев, поэтому я ожидал увидеть 2 комментария на странице, всего 4 страницы. Однако никаких разбиений на страницы нет.

Включение ошибок в php: Обратите внимание: неопределенное свойство: WP_Query :: $ comments в /wp-includes/comment.php в строке 788

Где я иду не так?

paginate_comment_links() фактически выполняет некоторую магическую настройку для комментариев, а затем вызывает стандартный wordpress paginate_links() . Я считаю, что часть этой магии использует результат wp_list_comments() .

Поэтому, даже несмотря на то, что ваш код отлично работает, вы не можете использовать встроенную функцию wp_list_comments() комментариев, поскольку вы не используете wp_list_comments() . И вы не можете использовать эту функцию, поскольку она получает комментарии только для определенной записи или страницы, которая не является тем, что вы пытаетесь сделать в любом случае …

Решение заключается в использовании paginate_links (), поскольку этот метод на самом деле очень гибкий. Для этого вам нужно знать 2 вещи: на какой странице вы находитесь, и сколько всего страниц. Чтобы учесть это, нам нужно получить все комментарии от get_comments() которые не являются оптимальными, но мы работаем с тем, что у нас есть. Вот мысленная картина того, как может выглядеть код (полностью непроверенный, поэтому никаких гарантий – извините):

 <?php $comments_per_page = 5; $current_page = max( 1, get_query_var('paged') ); global $current_user; get_currentuserinfo(); $userid = $current_user->ID; $args = array('user_id' => $userid, 'number' => 0); $comments = get_comments($args); $total_comments = count($comments); $total_pages = (($total_comments - 1) / $comments_per_page) + 1; $start = $comments_per_page * ($current_page - 1); $end = $start + $comments_per_page; // Might be good to test and make sure there are comments for the current page at this point! for($i = $start; $i < $end; $i++) { echo('<br />' . $comment->comment_date . '<br />' . $comment->comment_content); } if($total_pages > 1) { $args = { 'total'=>$total_pages, 'current'=>$current_page }; paginate_links($args); } ?> 

Вероятно, это не идеально, но это должно помочь вам указать направление в правильном направлении. Единственная уродливая часть состоит в том, что мы читаем все комментарии с запросом, а не ограничиваем его только комментариями на странице, которую хотим – но у нас нет другого хорошего способа получить количество комментариев, которые существуют для пользователя как ( get_comment_count основан на записи).