WP-CommentNavi
Как ни странно, но создатели WordPress никак не хотят добавить в движок постраничную навигацию, отдавая эту функцию на откуп различным плагинам. То есть формально то постраничная навигация в WordPress существует, но ограничена строго двумя страницами – "предыдущая" и "следующая", что естественно, мало кого устраивает. В WordPress 2.7 появилось долгожданное нововведение в виде разделения комментариев на страницы, но с той же проблемой, что и всегда: для более-менее нормальной настройки навигации по этим страницам нам придется использовать дополнительный плагин WP-CommentNavi, о нем и будет идти речь. До установки плагина навигация у нас будет выглядеть так:
После установки плагина мы получим что-то похожее на:
После небольшого изменения кода плагина и css стилей можно добиться совершенно различного вида этой навигационной панельки:
Скачиваем оригинальный плагин с его домашней страницы или берем русскую версию
1. Распаковываем архив.
2. Копируем папку wp-commentnavi в /wp-content/plugins/.
3. Заходим в админку блога на вкладку "Плагины" и активируем плагин.
Чтобы встроить навигацию в ваш шаблон найдите в файле comments.php строчки (на примере шаблона Default):
<div class="navigation"> <div class="alignleft"><?php previous_comments_link() ?></div> <div class="alignright"><?php next_comments_link() ?></div> </div> |
И замените их на:
<?php if(function_exists('wp_commentnavi')) { wp_commentnavi(); } ?> |
По умолчанию ссылку на страницу всех комментариев плагин не выдает, ее надо выводить отдельным кодом:
<?php if(function_exists('wp_commentnavi_all_comments_link')) { wp_commentnavi_all_comments_link(); } ?> |
Надо заметить, что плагин будет работать только если вы вставили оба эти кода строго после цикла The Comment Loop. То есть вывести навигацию перед выводом самих комментариев у вас не получится.
Постраничная навигация по комментариям у вас уже работает, а настройки выводимого текста вы можете изменить в Параметрах\CommentNavi. Не хочу повторяться со своими настройками, которые я уже описывал в статье о плагине WP-PageNavi - если вам это необходимо, то возьмите их там (автор плагина один и тот же и настройки плагинов практически идентичны).
Теперь стоит поговорить о мелких хаках, которые можно применить к плагину. Первым делом я избавил себя от головной боли с настройкой вывода через css ссылки на все комментарии. Я вставил ее в сам плагин, вы тоже можете это сделать заменив в файле wp-commentnavi.php строчку:
127 | case 1: |
на
127 128 | case 1: wp_commentnavi_all_comments_link('Все'); |
Затем я избавился от вывода ссылок на предыдущую и следующую страницы (не заполнив эти поля в настройках плагина вы от этих ссылок все равно не избавитесь). Для этого надо удалить строчки:
139 | previous_comments_link($commentnavi_options['prev_text']); |
и
149 | next_comments_link($commentnavi_options['next_text'], $max_page); |
Следующее, что мне показалось неправильным это то, что ссылка на последнюю страницу комментариев выглядит как /name.html/comment-page-2#comments вместо того, чтобы показывать /name.html#comments. Ведь в таком случае получается, что у нас есть две абсолютно одинаковые страницы с одним и тем же контентом (даже комментарии будут такими же), но с разными ссылками. С точки зрения SEO дубликаты страниц это плохо и я слегка модифицировал плагин, чтобы избежать такой ситуации. Для этого надо заменить строку:
146 | echo '<a href="'.clean_url(get_comments_pagenum_link($i)).'" class="page" title="'.$page_text.'">'.$page_text.'</a>'; |
на строки:
146 147 148 149 150 | if ($end_page != $max_page or $i != $end_page) { echo '<a href="'.clean_url(get_comments_pagenum_link($i)).'" class="page" title="'.$page_text.'">'.$page_text.'</a>'; } if ($end_page == $max_page and $i == $end_page) { $last_page_text = str_replace("%TOTAL_PAGES%", number_format_i18n($max_page), $commentnavi_options['last_text']); echo '<a href="'.clean_url(get_permalink()).'#comments" class="last" title="'.$last_page_text.'">'.$last_page_text.'</a>';} |
а также заменить строку:
159 | echo '<a href="'.clean_url(get_comments_pagenum_link($max_page)).'" class="last" title="'.$last_page_text.'">'.$last_page_text.'</a>'; |
на:
159 | echo '<a href="'.clean_url(get_permalink()).'#comments" class="last" title="'.$last_page_text.'">'.$last_page_text.'</a>'; |
На этом изменения плагина закончены. Но вы вовсе не обязаны что-либо менять, так как плагин будет нормально работать и без этих хаков. Изменить настройки выводимой панельки навигации можно через изменение стилей в файле commentnavi-css.css. Если кому интересно, то приведу свой стиль (посмотреть как он выглядит можно в статье WP-Cumulus):
.wp-commentnavi { padding-top: 10px; padding-bottom: 10px; } .wp-commentnavi a, .wp-commentnavi a:link, .wp-commentnavi a:visited { padding: 3px 6px 3px 6px; margin: 2px 0px 2px 0px; border-top: 1px solid black; color: #FFFFFF; background-color: #4f4f4f; font-size: 11px; font-weight: bold; text-decoration: none; } .wp-commentnavi a:hover { border-top: 1px solid black; color: #FFFFFF; background-color: black; font-weight: bold; text-decoration: underline; font-size: 11px; } .wp-commentnavi span.pages { padding: 3px 6px 3px 6px; margin: 2px 0px 2px 0px; color: #FFFFFF; border-top: 1px solid black; background-color: #4f4f4f; font-weight: bold; font-size: 11px; } .wp-commentnavi span.current { padding: 3px 6px 3px 6px; margin: 2px 0px 2px 0px; font-weight: bold; border-top: 1px solid black; color: #FFFFFF; background-color: black; font-size: 11px; } .wp-commentnavi span.extend { padding: 3px 0px 3px 0px; margin: 2px 0px 2px 0px; border-top: 1px solid black; color: #FFFFFF; background-color: #4f4f4f; font-weight: bold; font-size: 11px; } .wp-commentnavi-all-comments-link { border-right: 1px dotted black; border-left: 1px dotted black; } |
Автор плагина:
Страница плагина:
Рассматриваемая версия: 1.10 от 08.06.2008
Совместимость с версией WordPress: 2.8 и выше.
Понравился пост? Подпишись на обновления по RSS или Twitter !
#81,
Это уже наверное, привычка у меня)). Все время стараюсь находить способы для улучшения юзабилити. Да и так, иногда интересно!
#82,
С пермалинком неправильно. У Вас учитывается, что всего 2 страницы комментариев и вторая - это последняя. На самом деле, если страниц будет 5 или 10, то пермалинки всех страниц, кроме первой, будут иметь структуру:
#83,
это вы о чем?
потерял нить разговора.
#84,
В статье шел разговор о том, что плагин добавляет в пермалинк каждого комментария структуру страниц и это не есть хорошо для SEO в том плане, что комментарий может быть удален или сортировка изменена, или кол-во комментариев на странице изменено, тогда сразу поменяется URL комментария, ну а если на комментарий была внешняя ссылка, то она точно потеряется.
В статье давалось предложение как устранить эту вставку в URL'e. Но, как я понял из кода, предложение касалось только последней страницы. Это хорошо, если страниц 2. А если страниц комментариев будет 5, 20 или 50, то это не будет работать для страниц со 2-й по предпоследнюю. Об этом я и написал.
Связывался с Лестером, он написал, что эту структуру задает не плагин, а сам WordPress и надо обращаться в команду. Думаю, туда не достучаться будет с таким вопросом, они обычно крайне вяло реагируют на те темы, которые, на их взгляд, другим могут быть не интересны. При этом, пагинация постов (другой плагин того же Лестера) выдает хорошие УРЛы на сами посты, без структуры страниц. Поэтому, может быть кто-то знает, как сделать аналогично и для комментариев.
#85,
ой, ну это настолько редкая проблема, что я бы лично с ней не стал бы связываться. даже тут, у меня в блоге, я время от времени увеличиваю количество комментов на страницу (выросло с 15 до 20) и то это ничего не испортило, так как люди крайне редко ссылаются на чужие комментарии.
#86,
Ссылки на русскую версии не работают.