WordPress. Комментарии на отдельной странице
Дата публикации : 26-02-2009 | в рубрике : wordpress
Метки: comments, 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('« %link') ?></div>
<div class="alignright"><?php next_post_link('%link »') ?></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 »', '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('« %link') ?></div>
<div class="alignright"><?php next_post_link('%link »') ?></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']; ?>" />
Возможно представленное решение не отличается изяществом, зато оно гарантированно работает.



не подскажите как сделать вывод полного описания поста, но без текста размещенного перед ?
сейчас такая запись выводит все
<?php the_content(» . __(‘Read the rest of this entry »’, ‘kubrick’) . »); ?>
как ее изменить чтоб не выводить все что написано до
попробуйте написать так:
< ?php the_content('', true, ''); ?>должно сработать.
Здравствуйте, у меня вопрос не совсем по теме. Сделал комментарии для обычных страниц путем вставки в страницу page.php, все работает, но почемуто цвет самих надписей очень бледный, я понимаю что от темы зависит, но как и где это поправить не найду
все стили обычно находятся в файле style.css, если пользуетесь фаерфоксом, поставьте себе расширение для него firebug, с его помощью можно легко определить как называется стиль нужного вам элемента, после того как будете знать название сможете исправить в css.
Ну вообщем-то с интересом почитал. Спасибо.
Реально ли сделать над комментариями(на отдельной странице) вывод урезанной статьи, т.е. до тега , чтобы человек мог вернуться всегда к целой статье. У dimox’а вроде сделано что-то подобное, но как конкретно сделано – не пойму.
реально сделать что угодно, дайте ссылку, нужно глянуть о чем именно идет речь
Ссылка:
http://dimox.name/smooth_rounded_corners_no_images/comment-page-3/#comments
Скриншот:
http://clip2net.com/clip/m10803/1250014453-clip-112kb.jpg
Ну в качестве одного из вариантов решения этой проблемы, можно сделать следующее. Берем наш специальный шаблон single-comments.php, (если вы делали все как в статье), и выше строчки «Комментарии к записи», после начала цикла нужно вставить следующее:
Здесь, первая строчка, как не трудно догадаться, выводит ссылку-заголовок на полный текст статьи, а вторая строчка выводит урезанный вариант статьи – цитату. Если вы в админке заполните поле цитата, он выведет только этот текст, если это поле по умолчанию пустое, то тэг, выведет первые 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, этой строки там не хватало…
прописал вот эту строчку
не видно ;)
блог урезал код
более простое решение
вот на этой странице есть более простое решение данного вопроса, может быть будет полезно!
Скажите лучше как плагин называется для кода который у Вас на блоге?