WordPress. Комментарии на отдельной странице

комментарии на отдельной страницеWordPress становится все более популярным движком, и как следствие этого, все больше пользователей строят на его основе сайты-визитки. Но поскольку это все-таки блоговый движок, то мне часто приходится убирать из шаблона его характерные особенности, или добавлять нужный функционал.

Так вот в сегодняшней статье речь пойдет о том, как вывести комментарии к записи на отдельную страницу, если вам по каким-то причинам это очень хочется сделать.

Сначала опеределимся с тем, что у нас получится в результате, а получится у нас текст записи, под которой будет ссылка, ну например “Показать комментарии”:

ссылка с комментариями

В любом шаблоне присутствует файл, выводящий конкретную запись (single.php, index.php), он выглядит примерно так:

[php]
<?php get_header(); ?>

<div id="content" class="widecolumn">

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div class="navigation">
<div class="alignleft"><?php previous_post_link(‘&laquo; %link’) ?></div>
<div class="alignright"><?php next_post_link(‘%link &raquo;’) ?></div>
</div>

<div class="post" id="post-<?php the_ID(); ?>">
<h2><?php the_title(); ?></h2>

<div class="entry">
<?php the_content(‘<p class="serif">’ . __(‘Read the rest of this entry &raquo;’, ‘kubrick’) . ‘</p>’); ?>

<?php wp_link_pages(array(‘before’ => ‘<p><strong>’ . __(‘Pages:’, ‘kubrick’) . ‘</strong> ‘, ‘after’ => ‘</p>’, ‘next_or_number’ => ‘number’)); ?>
<?php the_tags( ‘<p>’ . __(‘Tags:’, ‘kubrick’) . ‘ ‘, ‘, ‘, ‘</p>’); ?>
</div>
</div>

<?php comments_template(); ?>

<?php endwhile; else: ?>

<p><?php _e(‘Sorry, no posts matched your criteria.’, ‘kubrick’); ?></p>

<?php endif; ?>

</div>

<?php get_footer(); ?>
[/php]

За вывод комментариев, отвечает другой шаблон, под именем comments.php, также присутствующий в любой теме WP. Этот шаблон инклудится в шаблон single.php (index.php) следующей строчкой:

[php]
<?php comments_template(); ?>
[/php]

Эту строчку можно смело  закомментировать, а на ее место, чуть позже, мы поместим ссылку на комментарии.

Для того, чтобы вывести комментарии на отдельной странице, нам необходимо создать для них специальный шаблон. Для этого берем шаблон single.php и сохраняем его например под именем single-comments.php.

В принципе можно оставить и так как есть, только расскомментировать строчку для комментариев, указанную выше, но поскольку на странице комментариев нам не нужно выводить текст записи, метки, и прочее, наш шаблон можно слегка модифицировать:

[php]
<?php get_header(); ?>

<div id="content" class="widecolumn">

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<div class="navigation">
<div class="alignleft"><?php previous_post_link(‘&laquo; %link’) ?></div>
<div class="alignright"><?php next_post_link(‘%link &raquo;’) ?></div>
</div>

<div class="post" id="post-<?php the_ID(); ?>">
<h2>Комментарии к записи <?php the_title(); ?></h2>
<?php comments_template(); ?>
<?php endwhile; else: ?>

<p><?php _e(‘Sorry, no posts matched your criteria.’, ‘kubrick’); ?></p>

<?php endif; ?>

</div>

<?php get_footer(); ?>
[/php]

Все, шаблон готов, осталась самая важная часть. Нужно как-то сообщить WordPress, о том что у нас есть новый шаблон, для вывода комментариев, и когда именно его нужно загружать. Для этого воспользуемся файлом functions.php, который непременно присутствует в каждой теме, и напишем следующее:

[php]
add_filter(‘single_template’, ‘dh_comments_template’);
function dh_comments_template($template) {
global $wp_query;
if ( $_GET[‘comments’] == ‘1’ and
file_exists(TEMPLATEPATH . ‘/single-comments.php’) )
$template = TEMPLATEPATH . ‘/single-comments.php’;
return $template;
}
[/php]

Здесь довольно простая функция, проверяющая присвоено ли значение 1 параметру comments и существует ли наш созданный шаблон single-comments.php. Как нетрудно догадаться, если оба условия выполнены, загружается нужный нам шаблон.

Теперь нужно поставить ссылку на просмотр страницы с комментариями, она будет выглядеть следующим образом:

[php]
<a href="<?php get_permalink()?>?comments=1">Показать комментарии</a>
[/php]

Здесь используется ссылка текущей страницы, плюс к ней передается параметр comments, равный единице.

Выполнив эти нехитрые действия, вы получите работающий шаблон, единственное, при добавлении нового комментария, на отдельной странице, вас будет перекидывать на страницу с постом. Но это проблема разрешима, нужно добавить одну строчку, перед закрывающим теэгом </form>, в шаблоне comments:

[php]
<input type="hidden" name="redirect_to" value="<?php echo $_SERVER[‘REQUEST_URI’]; ?>" />
[/php]

Возможно представленное решение не отличается изяществом, зато оно гарантированно работает.


Posted

in

by

Comments

48 responses to “WordPress. Комментарии на отдельной странице”

  1. Dima Avatar
    Dima

    не подскажите как сделать вывод полного описания поста, но без текста размещенного перед ?
    сейчас такая запись выводит все
    <?php the_content(” . __(‘Read the rest of this entry »’, ‘kubrick’) . ”); ?>
    как ее изменить чтоб не выводить все что написано до

    1. dreamhelg Avatar
      dreamhelg

      попробуйте написать так:

      
      

      должно сработать.

  2. Майк Avatar

    Здравствуйте, у меня вопрос не совсем по теме. Сделал комментарии для обычных страниц путем вставки в страницу page.php, все работает, но почемуто цвет самих надписей очень бледный, я понимаю что от темы зависит, но как и где это поправить не найду

    1. dreamhelg Avatar
      dreamhelg

      все стили обычно находятся в файле style.css, если пользуетесь фаерфоксом, поставьте себе расширение для него firebug, с его помощью можно легко определить как называется стиль нужного вам элемента, после того как будете знать название сможете исправить в css.

  3. Roman Avatar
    Roman

    Ну вообщем-то с интересом почитал. Спасибо.

  4. Sonikelf Avatar

    Реально ли сделать над комментариями(на отдельной странице) вывод урезанной статьи, т.е. до тега , чтобы человек мог вернуться всегда к целой статье. У dimox’а вроде сделано что-то подобное, но как конкретно сделано – не пойму.

    1. dreamhelg Avatar
      dreamhelg

      реально сделать что угодно, дайте ссылку, нужно глянуть о чем именно идет речь

    1. dreamhelg Avatar
      dreamhelg

      Ну в качестве одного из вариантов решения этой проблемы, можно сделать следующее. Берем наш специальный шаблон single-comments.php, (если вы делали все как в статье), и выше строчки “Комментарии к записи”, после начала цикла нужно вставить следующее:

      
       - внутри ссылки в качестве параметра href
      
      
      
      [Чтобы вернуться к полной версии
      статьи, кликните на заголовок]
      

      Здесь, первая строчка, как не трудно догадаться, выводит ссылку-заголовок на полный текст статьи, а вторая строчка выводит урезанный вариант статьи – цитату. Если вы в админке заполните поле цитата, он выведет только этот текст, если это поле по умолчанию пустое, то тэг, выведет первые 55 слов.

  5. Sonikelf Avatar

    Мм.. Спасибо, попробую. Только что-то у Вас комментарий куда-то уполз и я его не вижу целиком. Скрин: http://clip2net.com/clip/m10803/1250065568-clip-47kb.jpg

  6. Sonikelf Avatar

    Мм.. Реализовать вывод именно куска до не получится? Ведь на главной как-то выводится именно этот кусок, неужели нельзя стыбрить какой-то код и вставить туда.

    Ну или, как вариант, где-то просто поменять параметр, чтобы выводилось не 55, а указанное мною число.

    1. dreamhelg Avatar
      dreamhelg

      Тоже можно, только чуть-чуть сложнее. Делаем следующее:

      1. ДО начала цикла вставляем такую строчку:

      2. Затем, внутри цикла:

      – внутри ссылки

      
      

      И текст записи будет выведен только до тега more, который вы устанавливаете в админке.

  7. Сергей Avatar

    Полезная информация, спасибо.
    А возможно ли сделать вывод всех комментариев ко всем постам отдельной страницей? Примерно так, как в самой админке… То есть, как сделать, чтоб посетитель, кликнув по ссылке, скажем, “Комментарии”, попадал на страницу, на которой шли бы все подряд комментарии со всех постов в виде “Название поста – и комментарии к нему” и т.д.
    Возможно, это решено каким-то плагином, но отыскать его в Сети пока не удалось… Помогите!

    1. dreamhelg Avatar
      dreamhelg

      Это сделать конечно можно, только я сразу вам не могу сказать как именно. Нужно немного подумать, никогда раньше не сталкивалась с такой задачей. Обязательно напишу небольшую заметку об этом, думаю вполне можно обойтись без плагинов

    2. dak Avatar

      у меня реализовано, могу поделиться, если актуально ещё

  8. Ramte Avatar
    Ramte

    Привет! спасибо!
    А почему на дополнительной странице исчезает панель форматирования для поля ввода комментария?

    1. dreamhelg Avatar
      dreamhelg

      Вообще не должно ничего исчезать, покажите пример.

      1. Ramte Avatar
        Ramte

        Блог сейчас только на localhost… Попытаюсь разобраться (правда я с WP только несколько дней знаком 🙂 ).

      2. Ramte Avatar
        Ramte

        Описанные в статье изменения никакого влияния на мой случай не оказали. Похоже, я “перемудрил” в чём-то более глобальном.
        Некий скрипт должен подписывать перед

        запускать js
        edToolbar();
        (как на этой странице)
        Если этот участок просто добавить над textarea в файле comments.php, эффекта не даст… но это всё же другая история.
        А руководство “WordPress. Комментарии на отдельной странице” работает!

        (SЕО: Как сделать комментарии на отдельной странице. Вывод комментариев пользователей на дополнительную страницу. Плагин – руководство – мануал.)

        1. Ramte Avatar
          Ramte

          *
          перед
          textarea
          запускать js
          *

          1. Ramte Avatar
            Ramte

            такую проблему может решить плагин “comment_quicktags.php“Comment Quicktags -Reloaded”

  9. Psiside Avatar
    Psiside

    подскажите пожалуста как сделать так, чтобы на главной странице отображалась одна запись а под ней коментирование

    1. dreamhelg Avatar
      dreamhelg

      В общем-то есть способ, нужно сделать следующее:

      1. Скопируйте файл вашей темы index.php, и сохраните его под именем home.php

      2. Далее в этом файле, перед началом цикла нужно вставить вот такую строчку:

      3. А потом, внутри цикла нужно вставить код, приведенный в этой статье

      Если все сделали правильно, будет работать.

  10. DrakAngel Avatar

    Интересно, но не понятно зачем. По моему блог без комментариев под записью, это как-то и не блог чтоли =\

    1. dreamhelg Avatar
      dreamhelg

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

  11. Psiside Avatar
    Psiside

    Да это не блог а обычный сайт визитка! данный вопрос я решил немного проще в настройках пресса просто сделал главную статичной, а вывод постов перенаправил на другую страничку. при этом у меня не выводились коменты, это меня и возмущало, данный вопрос решил прописав в нужном месте в page.php, этой строки там не хватало…

  12. Psiside Avatar
    Psiside

    прописал вот эту строчку

    1. Ramte Avatar
      Ramte

      не видно 😉

  13. Psiside Avatar
    Psiside

    блог урезал код

  14. Андрюха Воробьев Avatar

    более простое решение
    вот на этой странице есть более простое решение данного вопроса, может быть будет полезно!

  15. Ольга Avatar

    Скажите лучше как плагин называется для кода который у Вас на блоге?

  16. Vertuoz Avatar

    Имя плагина скажите пожалуйста

  17. Илона Завьялова Avatar

    Здравствуйте, помогите, у нас есть сайт, но я никак не могу добавить туда комментарии, к определенной странице чтобы люди могли их оставлять, помогите пожалуйста

  18. Илона Завьялова Avatar

    Сейчас прочитала вашу статью http://euro-usd.ru/2009/04/30/wordpress-dobavlyaem-kommentarii-k-stranice/

    Зашла в редактор, далее нашла (single.php) и там в файле вот такое вот содержание:


    Т.е я так поняла что фкнкция отвечающая за вывод комментраиев у нас отсутствует? что нужно сделать чтобы на нужные нам страницы можно было добавить комментарий?

    1. dreamhelg Avatar
      dreamhelg

      Я не знаю в чем ваша проблема, во-первых потому что код не добавился, во-вторых, потому что для этого нужно полностью смотреть тему. Единственное что могу вам посоветовать, следующее: активируйте стандартную тему вордпресс twentyeleven, и попробуйте добавить комментарий. Если он добавится, значит проблема с вашим шаблоном, сравните файлы single.php, page.php (если у вас есть такой в теме), index.php, и добавьте отсутствующий код.

      А указанная вами статья по ссылке, вовсе не моя 😉

  19. Андрей Avatar

    Здравствуйте, подскажите пожалуйста, что и куда нужно прописать в редактор темы WordPress, что бы текст записей на главной странице частично скрывался. Вот адрес DizainStar.ru.

  20. Натали Avatar
    Натали

    А как сделать так, чтобы на сайте одностраничнике были подключены комментарии WP.

    то есть есть блог, но эта страница как бы отдельная, ни с че не связана. Но комментарии там можно оставлять через станд. форму вп-комментариев?

    задумка такая, что эту страницу буду ддавать только по просьбе, но комментарование там обязательно нужно

  21. Андрей Avatar
    Андрей

    Здравствуйте, у меня такой вопрос, есть сайт на wordpress двуязычный (русский и украинский), это сайт мед.клиники на сайте есть страница с отзывами, но отзивы только на русской версии сайта, можно сделать так чтобы когда пишеш отзыв на русской версии он атоматически отсылался и на укр. версию сайта ми наоборот?

  22. Ярослав Avatar

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

    Подскажите, как вывести все комментарии ко всем записям на отдельной странице в меню, например “Отзывы” – SMC WordPress

    я взял шаблон от single.php сделал single-comments.php а потом в function.php зарегистрировал single-comments.php таким образом

    add_filter(‘single_template’, ‘dh_comments_template’);
    function dh_comments_template($template) {
    global $wp_query;
    if ( $_GET[‘comments’] == ‘1’ and
    file_exists(TEMPLATEPATH . ‘/single-comments.php’) )
    $template = TEMPLATEPATH . ‘/single-comments.php’;
    return $template; }

    вопрос : Почему не выводятся комментарии ? нужно где то дописать ссылку в какой-то .php на какой на какой странице выводить комментарии

  23. Татьяна Avatar
    Татьяна

    Здравствуйте! Спасибо за статью! Сделала все, как вы описали, все получилось. Единственная проблема – ссылка “Ответить” перебрасывает на страницу с постом. Подскажите, пожалуйста, как поправить? Уже очень много информации перерыла, не могу найти решения. Заранее спасибо.

  24. Александр Avatar

    А как-то обойтись без такой записи – ?comments=1, можно ли сделать просто слеш и comments без параметров?

  25. Марго Avatar

    Спасибо, установили клиенту. Наконец он доволен.

  26. fedor Avatar
    fedor

    Но это проблема разрешима, нужно добавить одну строчку, перед закрывающим теэгом , в шаблоне comments:

    ?
    1
    <input type="hidden" name="redirect_to" value="” />

    у меня нет тега форм в шаблоне coments

  27. Georg Avatar

    А можно как-то его интегрировать в плагин Woocommerce?

  28. Владимир SEO Avatar

    Грасиас. После часа перелопачивания получилось установить. Спасибо на мануале.

  29. GranFunl276 Avatar

    Здравствуйте при переходе на каждую страничку на вашем блоге из браузера chrome у меня происходит ошибка, а если зайти с exploer то работает, почему так происходит?

  30. arendabitovki.ru Avatar

    Сделал по данной инструкции. Ссылка «Ответить» перекидывает на страницу с постом. Где и как поправить?

  31. zipmeme.com Avatar

    можно использовать внутри Цикла WordPress или за пределами Цикла WordPress, но на отдельной странице поста (single.php). Или можно использовать где угодно, если указать какой именно пост нужно проверить.

Leave a Reply to Ярослав Cancel reply

Your email address will not be published. Required fields are marked *