Постраничная навигация в комментариях WordPress без плагина

Постраничная навигация в комментариях WordPress без плагина

Так же, как и при создании постраничной навигации в архивах сайта, работающего на движке WordPress, можно сделать постраничную навигацию в комментариях без использования каких-либо плагинов. Для этого используется специальная функция paginate_comments_links(), которая появилась в WordPress версии 2.7. Работает она на основе функции вывода постраничной навигации ...

Комментарии (71)

  1. <?php // Do not delete these lines
         if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
         die ('Please do not load this page directly. Thanks!');
         if (!empty($post->post_password)) { // if there's a password
    
            if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post->post_password) {  // and it doesn't match the cookie
    
                ?>
             <p class="nocomments">This post is password protected. Enter the password to view comments.<p>
             <?php
             return;
             }
         }
         /* This variable is for alternating comment background */
         $oddcomment = 'alt';
    ?>
    <!-- You can start editing here. -->
    <div id="blog_comm">
    <a id="comments"></a>
    <?php if ($comments) : ?>
    <h3>Комментарии</h3>
    
         <?php foreach ($comments as $comment) : ?>
             <div class="comm_panel">
             <b><?php comment_author_link() ?></b>  <?php comment_date('j F, Y') ?> в <?php comment_time() ?> 
    <span class="quoter"><a href="javascript:void(0);" onmousedown="postQuote('','comment','Вы не выделили текст');return false;" title="Выделите текст на странице и кликайте">Цитировать</a></span>
             </div>
             <div class="comm_text">
                    <?php if ($comment->comment_approved == '0') : ?>
                    <font color="#d90e31"><em>Ваш комментарий будет опубликован после проверки.</em></font>
                 <?php endif; ?>
                 <?php comment_text() ?>
            </div>
            <br />
         <?php endforeach; /* end for each comment */ ?>
    <?php else : // this is displayed if there are no comments so far ?>
    <?php if ('open' == $post->comment_status) : ?>
          <!-- If comments are open, but there are no comments. -->
         <?php else : // Comments are closed. ?>
     
          <!-- If comments are closed. -->
         <?php endif; ?>
    <?php endif; ?>
    <?php if ('open' == $post->comment_status) : ?>
    <div id="comments_from_bg">
    <a id="respond"></a>
      <div id="comm_post_title">
       Оставить комментарий
      </div>
    <?php if ( get_option('comment_registration') && !$user_ID ) : ?>
      <p>You must be <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?redirect_to=<?php the_permalink(); ?>">logged in</a> to post a comment.</p>
    <?php else : ?>
        <div id="comm_post_form">
        <form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">
        <table cellspacing="0" cellpadding="0">
        <?php if ( $user_ID ) : ?>
            <tr>
                <td colspan="2">
             <p>Logged in as <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo get_option('siteurl'); ?>/wp-login.php?action=logout" title="Log out of this account">Logout &raquo;</a></p>
             </td>
    		 </tr>
        <?php else : ?>
            <tr>
                <td class="right">
                 Имя:
                 </td>
                 <td>
                 <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
                 </td>
             </tr>
            <tr>
                <td class="right">
                    E-mail:
                 </td>
                <td>
                  <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
                 </td>
            </tr>
            <tr>
                 <td class="right">
                 Антиспам:
                 </td>
                 <td>
    <?php if ( function_exists('math_comment_spam_protection') ) {
    $mcsp_info = math_comment_spam_protection();
    ?> <input type="text" name="<?php echo $mcsp_info['fieldname_answer'] ?>" id="<?php echo $mcsp_info['fieldname_answer'] ?>" value="" size="22" tabindex="2" />
    <label for="<?php echo $mcsp_info['fieldname_answer'] ?>">сколько будет: <?php echo $mcsp_info['operand1'] . ' + ' . $mcsp_info['operand2'] . ' ?' ?></label>
    <input type="hidden" name="<?php echo $mcsp_info['fieldname_hash'] ?>" value="<?php echo $mcsp_info['result']; ?>" />
    
    <?php } // if function_exists... ?>
    
              </td>
            </tr>
         <?php endif; ?>
         <!--<p><small><strong>XHTML:</strong> You can use these tags: <?php echo allowed_tags(); ?></small></p>-->
             <tr>
                <td class="right">
                 Комментарий:
                 </td>
                <td>
    <?php if(function_exists(wp_comment_quicktags_plus)) { wp_comment_quicktags_plus(); } ?>
                   <textarea name="comment" id="comment" cols="60" rows="5" tabindex="4"></textarea>
                </td>
            </tr>
            <tr>
                <td>
                </td>
                <td>
                 <input name="submit" type="submit" value="Отправить" class="sub" />
                </td>
                </tr>
        </table>
    <input type="hidden" name="comment_post_ID" value="<?php echo $id; ?>" />
     <?php do_action('comment_form', $post->ID); ?>
        </form>
       </div>
    </div>
    <?php endif; // If registration required and not logged in ?>
    <?php endif; // if you delete this the sky will fall on your head ?>
    </div>
  2. Цифры появились. В записи 12 комментариев, появились 2 цифры 1 и 2, но на первой и второй странице отображаютя все 12 комментариев. В чем может быть проблема, подскажите, пожалуйста?
    В админке стоит галочка – “Разбивать комментарии верхнего уровня на страницы по 10 штук, по умолчанию отображается последняяпервая страница “

  3. Понятно, спасибо.

  4. Взял файл comments.php из другого шаблона с функцией wp_list_comments(), чуть переделал – нормально все работает. Спасибо.
    Хотел еще спросить. Не помню где, но точно видел – тоже постраничная навигация в комментариях, но страница с цельным текстом только последняя (или первая, т.е. с изначальным URL), а остальные страницы с анонсом записи. Не подскажите как это можно сделать?

  5. Здравствуйте. Еще раз спасибо, все работает. Но есть одна проблема. При отправке комментария не с последней станицы у меня не происходит редиректа на последнюю страницу, т.е. пользователь, отправив комментарий, остается на той же странице и не видит отправлен его комментарий, или нет. Для того, что бы увидеть свой коммент (или сообщение о том, что он будет опубликован после проверки) нужно перейти на последнюю страницу. Подскажите, пожалуйста, в чем проблема и как ее исправить?

  6. Дружище, я тебе люблю!!! Ты мне очень помог! Спасибо :)

  7. Спасибо! как всегда выручили!
    Избавилась еще от одного плагина навигации.

  8. Здравствуйте, Dimox! Успешно использую ваш код на одном из сайтов. Возникла проблема дублирования title на страницах комментариев. Как сделать, чтоб на этих страницах после тайтла дописывалось что-то типа: – страница комментариев 2.

    Тайтлы выводятся плагином ALL in SEO. Я находил различные коды условий проверки на страницу комментария и дописывал в файле header.php темы перед закрывающим тегом title. Не работает. Может, это как-то связано с вашим кодом, который я использую? Он у меня в functions.php.

    Версия вордпресса 3.4.1. Помогите, пожалуйста.

  9. А чем у вас организована навигация? Этими правками, или плагинами?
    Особенно интересно выглядит кнопка “(ответить)”.
    Заранее спасибо за ответ.

  10. Спасибо, код рабочий. Возникает два момента:
    1) Стили. Куда впихивать дивы? Если впихнуть в шаблон там, где выводим комменты, то выводится две навигации.

    2) Важный! А как поступить, если на первой страницы навигации комментов должны выводиться самые свежие? По умолчанию они на последней. Копание в админке, как и в интернете результатов не дало.

    Даже если мы выбираем отобразить на странице комментарии с последней (самой новой) страницы, то всё ок, они выводятся, да только на этой странице не 10 комментов, а два, например (на остальных по десять).

  11. Забыли про пункт 2. Появился пункт 3.

    3) А что если я хочу перейти на определенны комментарий? Например, http://xn—-7sbqtiudfgnm6i.xn--p1ai/otzyvy-i-kommentarii-o-medikamentoznom-aborte/#comment-377. Но вместо перехода на указанный коммент, меня выкидывает на первую страницу всех комментариев. Как исправить?

  12. Спасибо. Пригодилось для моего блога

  13. Здравствуйте! Спасибо за код! Все работает, но почему-то среди кнопочек не показывается “…”, а висит где-то справа-сверху, нумерация же идет сплошным рядом 1,2,4 Подскажите, плиз, что сделать, чтобы … на место прописать?
    И еще – можно ли как-то убрать кнопочки с “предыдущей” и “следующей” страницами? А то получается 2 ссылки на одну и туже страницу – зачем они?
    Заранее спасибо!

    • Все работает, но почему-то среди кнопочек не показывается «…», а висит где-то справа-сверху, нумерация же идет сплошным рядом 1,2,4 Подскажите, плиз, что сделать, чтобы … на место прописать?

      Наугад сложно сказать. Возможно, написан неправильный CSS-код.

      И еще — можно ли как-то убрать кнопочки с «предыдущей» и «следующей» страницами? А то получается 2 ссылки на одну и туже страницу — зачем они?

      Такой возможности, к сожалению, нет.

      • css я не мудрствуя лукаво прописала тот же, что и к навигации главной страницы (она в теме встроенная) Что там может быть неправильно?
        Изменила в Вашем коде commentNavigation в диве на pagination, тем самым напрямую подключив его к стилю навигации шаблона. Получилось, но проблема-таки осталась – висит “…” в правом углу
        В коде элемент “…” читается на главной …, а в комментах: …
        Разобралась, пока писала! Нужно было просто добавить .pagination span.dots в css рядом с .pagination span.extend И проблема решилась, ура!
        Может, кому пригодится :)

  14. У вас страница доступна по двум адресам. Сначала по:
    …./wordpress-comments-pagination-without-a-plugin/
    И по странице
    wordpress-comments-pagination-without-a-plugin/comment-page-2/#comments
    Это когда переходишь на постраничной навигации комментариев.
    Как можно такое исправить? Может каким редиректом?

  15. а как сделать чтобы выводилось не 3 страницы, а столько сколько есть? У меня только 2 страницы, зачем мне 3я? Или допустим у меня 20 стр., тогда 1,2.3… 20.

  16. А как быть, если я менял вывод комментариев функциями в functions.php и сейчас у меня пагинация выводится, но на каждой странице идет повтор первой страницы комментариев?

    код для изменения брал с этого сайта wordsmall ru/sajtostroenie/wordpress-kommentarii-polnoe-oformlenie-vneshnego-vida.html

    Если вернуть встроенный вывод комментариев, то всё работает.

  17. Всё круто, но, подскажите пожалуйста, как убрать в ссылке на предыдущую/следующую страницу комментариев вот это – #comments. Удалил в /wp-includes/comment-template.php – не помогло.
    Заранее спасибо.

  18. Добрый день, не подскажите как у вас реализован вывод только анонса (цитаты) поста на страницах пагинации комментариев, а не всего поста целиком?

  19. Добрый день! Подскажите пожалуйста как вывести полный путь URL на 1 странице комментариев, как у Вас comment-page-1/#comments? У меня выводится только #comments

  20. И ещё вопрос. У Вас в Яндекс браузере отображается на русском страница комментариев на которой мы находимся, как этого добиться?

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