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

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

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

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

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

В любом шаблоне присутствует файл, выводящий конкретную запись (single.php, index.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(); ?>

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

 <?php comments_template(); ?>

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

Для того, чтобы вывести комментарии на отдельной странице, нам необходимо создать для них специальный шаблон. Для этого берем шаблон single.php и сохраняем его например под именем single-comments.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(); ?>

Все, шаблон готов, осталась самая важная часть. Нужно как-то сообщить WordPress, о том что у нас есть новый шаблон, для вывода комментариев, и когда именно его нужно загружать. Для этого воспользуемся файлом functions.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;
}

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

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

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

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

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

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

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

Комментарии: (32)

  1. Dima

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

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

    • dreamhelg

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

  3. Roman

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

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

    • dreamhelg

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

    • dreamhelg

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

      
      < ?php the_permalink(); ?> - внутри ссылки в качестве параметра href
      < ?php the_title(); ?>
      
      < ?php the_excerpt(); ?>
      [Чтобы вернуться к полной версии
      статьи, кликните на заголовок]
      

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

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

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

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

    • dreamhelg

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

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

      < ?php global $more; ?>

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

      < ?php the_permalink(); ?> — внутри ссылки
      < ?php the_title(); ?>

      < ?php
            $more = 0;
            the_content("[...]");
      ?>
      

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

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

    • dreamhelg

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

    • dak

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

  8. Ramte

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

    • dreamhelg

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

      • Ramte

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

      • Ramte

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

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

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

  9. Psiside

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

    • dreamhelg

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

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

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

      < ?php query_posts('posts_per_page=1')?>

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

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

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

    • dreamhelg

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

  11. Psiside

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

  12. Psiside

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

  13. Psiside

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

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

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>