Интересные статьи

Создание навигации “волшебная... Такой “скользящий” стиль навигации существует довольно давно, мне всего лишь было нужно изменить...

Readmore

15 регулярных выражений PHP в помощь... Регулярные выражения – это очень полезный инструмент для разработчиков. С их помощью можно находить,...

Readmore

Создание формы со скользящими... Пару недель назад, я читал статью Люка Вроблевски. Для тех, кто еще не слышал о нем, Люк -  автор...

Readmore

Анимация jQuery: изучение за 7 шагов Небольшой штрих анимации может украсить любой, скучный интерфейс. В сегодняшней статье, вы узнаете,...

Readmore

Фантастическая CSS3 лайтбокс... С удовольствием принимаю эстафету по обзору полезных зарубежных ресурсов, предложенную блоггером...

Readmore

Очередной блог фрилансера Rss

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

Дата публикации : 26-02-2009 | в рубрике : wordpress

Метки: , ,

31

комментарии на отдельной странице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']; ?>" />

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

Похожие записи

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

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

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

< ?php the_content('', true, ''); ?>

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

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

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

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

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

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

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


<?php the_permalink(); ?> - внутри ссылки в качестве параметра href
< ?php the_title(); ?>

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

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

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

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

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

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

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

<?php global $more; ?>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

не видно ;)

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

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

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

Оставьте комментарий