WordPress как на ладони
wordpress jino

paginate_comments_links() WP 2.7.0

Выводит список ссылок на страницы комментариев (ссылки пагинации), текущего поста.

С версии 2.7. WordPress разработчиками был упрощен шаблон комментариев (файл comments.php), чтобы было проще создавать и редактировать отображение комментариев. Одним из таких улучшений стала возможность разделять комментарии на страницы и теперь посетителям не нужно подгружать сотни комментариев на одной странице, а можно сделать постраничную навигацию комментариев.

Включить разделение комментариев на несколько страниц (пагинацию комментариев) можно на странице админ-панели Настройки > Обсуждение.

После того, как разделение включено в системе, ссылки навигации по страницам комментариев можно вывести таким кодом:

<?php paginate_comments_links(); ?>

Неким аналогом такой пагинации являются функции next_comments_link() и previous_comments_link(), которые выводят ссылки на следующую и предыдущую страницу комментариев.

Почти такая же функция-аналог: get_the_comments_pagination()

Используется в: get_the_comments_pagination().
Работает на основе: paginate_links()

Хуков нет.

Использование

<?php paginate_comments_links( $args ) ?>

Параметры по умолчанию

$args = array(
	'base'    => add_query_arg( 'cpage', '%#%' ),
	'format'  => null,
	'total'   => $max_page,
	'current' => $page,
	'echo'    => true,
	'add_fragment' => '#comments',
);

paginate_comments_links( $args );
$args(строка/массив)

Аргументы на основе которых будет получен результат.

Ядром paginate_comments_links() является функция paginate_links(), поэтому она может принимать все те же параметры.

По умолчанию: предустановки

Примеры

#1 Вывод постраничной навигации комментариев

Если в настройках установлено "разделять комментарии на страницы", то в шаблоне используется такой код чтобы вывести навигацию:

<div class="navigation"><?php paginate_comments_links( $args ) ?></div>

В итоге мы получим подобный код:

<div class="navigation">
	<a class="prev page-numbers" href="/id_140/comment-page-3#comments">«««</a>
	<a class='page-numbers' href='http://wp-kama.ru/id_140/comment-page-1#comments'>1</a>
	<a class='page-numbers' href='http://wp-kama.ru/id_140/comment-page-2#comments'>2</a>
	<a class='page-numbers' href='http://wp-kama.ru/id_140/comment-page-3#comments'>3</a>
	<span class='page-numbers current'>4</span>
</div>

#2 Изменение текстов ссылок "следующая/предыдущая страница"

Чтобы изменить тексты ссылок следующая/предыдущая страница", функции нужно передать аргументы prev_text и next_text

paginate_comments_links('prev_text=back&next_text=forward')

Если в текстах ссылок нужно использовать специальные html символы (html сущности), то аргументы нужно передавать через массив:

paginate_comments_links( array('prev_text' => '«', 'next_text' => '»') )

Код paginate comments links: wp-includes/link-template.php WP 4.8.2

<?php
function paginate_comments_links( $args = array() ) {
	global $wp_rewrite;

	if ( ! is_singular() )
		return;

	$page = get_query_var('cpage');
	if ( !$page )
		$page = 1;
	$max_page = get_comment_pages_count();
	$defaults = array(
		'base' => add_query_arg( 'cpage', '%#%' ),
		'format' => '',
		'total' => $max_page,
		'current' => $page,
		'echo' => true,
		'add_fragment' => '#comments'
	);
	if ( $wp_rewrite->using_permalinks() )
		$defaults['base'] = user_trailingslashit(trailingslashit(get_permalink()) . $wp_rewrite->comments_pagination_base . '-%#%', 'commentpaged');

	$args = wp_parse_args( $args, $defaults );
	$page_links = paginate_links( $args );

	if ( $args['echo'] )
		echo $page_links;
	else
		return $page_links;
}

Cвязанные функции

Из метки: Пагинация комментариев (навигация)

Еще из раздела: Комментарии

paginate_comments_links 3 комментария
  • GoliafRS cайт: goliafrs.ru

    Переделал функцию вывода paginate_links отсюда для вывода по страничной навигации для страниц комментариев.

    function comments_pagination() {
    	$big = 999999999;
    
    	global $cpage;
    	if ($cpage == '') {
    		$cpage = 1;
    	}
    
    	$args = array(
    		'base'         => str_replace($big, '%#%', get_comments_pagenum_link($big)),
    		'format'       => '',
    		'total'        => get_comment_pages_count(null, null, false),
    		'current'      => $cpage,
    		'show_all'     => false,
    		'end_size'     => 1,
    		'mid_size'     => 3,
    		'prev_next'    => true,
    		'prev_text'    => __('Previous'),
    		'next_text'    => __('Next'),
    		'type'         => 'plain',
    		'add_args'     => false,
    		'add_fragment' => ''
    	);
    
    	$result = paginate_comments_links($args);
    
    	echo $result;
    }

    Теперь можно использовать и в комментариях:

    <?php comments_pagination(); ?>

    Единственный вопрос мной остался не решенным, как из ссылок навигации убрать или поменять на свой в конце /#comments не прибегая при этом к функциям PHP типа str_replace()?
    По сути за это отвечает аргумент add_fragment, но он пустой, почему передается id не понятно...

    Тимур, есть решение? Подскажи пожалуйста, буду очень признателен.

    Ответить1.5 года назад #
    • Kama4464

      #comments добавляет функция get_comments_pagenum_link(). Её нужно обработать и лучше прям в коде вашей функции.

      Вот все варианты как это можно сделать, со скоростью выполнения. Работа с символами строки напрямую как всегда всех рвёт smile

      $link = get_comments_pagenum_link(99999999);
      // $link = http://site.ru/page/comment-page-99999999#comments
      
      // скорость на 50000 операций
      $_link = strip_fragment_from_url($link);        // 0.060 sec
      $_link = preg_replace('~#.*~', '', $link);      // 0.014 sec
      $_link = str_replace('#comments', '', $link ); //  0.010 sec
      $_link = substr($link, 0, strpos($link, '#') ); // 0.007 sec
      // $_link = http://site.ru/page/comment-page-99999999
      
      1
      Ответить1.5 года назад #
  • Andrey cайт: azmlm.com @

    Добрый день. Есть проблема, разбиваю комментарии на странице и вывожу сначала более поздние. Но если комментарии разбиты по 25 штук на страницу, а всего 26 комментариев, то на оригинальной странице будет всего 1 комментарий, а остальные 25 будут на второй странице. Вот пример https://azmlm.com/sashproject/

    Как сделать так, чтоб на оригинальной странице выводилось 25 комментариев, а не остатки от пагинации??? Спасибо.

    Ответитьмесяц назад #

Здравствуйте, !

Ваш комментарий