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’) . »); ?>
как ее изменить чтоб не выводить все что написано до
попробуйте написать так:
должно сработать.
Здравствуйте, у меня вопрос не совсем по теме. Сделал комментарии для обычных страниц путем вставки в страницу 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. ДО начала цикла вставляем такую строчку:
2. Затем, внутри цикла:
— внутри ссылки
И текст записи будет выведен только до тега
more
, который вы устанавливаете в админке.Полезная информация, спасибо.
А возможно ли сделать вывод всех комментариев ко всем постам отдельной страницей? Примерно так, как в самой админке… То есть, как сделать, чтоб посетитель, кликнув по ссылке, скажем, «Комментарии», попадал на страницу, на которой шли бы все подряд комментарии со всех постов в виде «Название поста — и комментарии к нему» и т.д.
Возможно, это решено каким-то плагином, но отыскать его в Сети пока не удалось… Помогите!
Это сделать конечно можно, только я сразу вам не могу сказать как именно. Нужно немного подумать, никогда раньше не сталкивалась с такой задачей. Обязательно напишу небольшую заметку об этом, думаю вполне можно обойтись без плагинов
у меня реализовано, могу поделиться, если актуально ещё
Привет! спасибо!
А почему на дополнительной странице исчезает панель форматирования для поля ввода комментария?
Вообще не должно ничего исчезать, покажите пример.
Блог сейчас только на localhost… Попытаюсь разобраться (правда я с WP только несколько дней знаком :) ).
Описанные в статье изменения никакого влияния на мой случай не оказали. Похоже, я «перемудрил» в чём-то более глобальном.
Некий скрипт должен подписывать перед
запускать js
edToolbar();
(как на этой странице)
Если этот участок просто добавить над textarea в файле comments.php, эффекта не даст… но это всё же другая история.
А руководство «WordPress. Комментарии на отдельной странице» работает!
(SЕО: Как сделать комментарии на отдельной странице. Вывод комментариев пользователей на дополнительную страницу. Плагин — руководство — мануал.)
*
перед
textarea
запускать js
*
такую проблему может решить плагин «comment_quicktags.php» «Comment Quicktags -Reloaded»
подскажите пожалуста как сделать так, чтобы на главной странице отображалась одна запись а под ней коментирование
В общем-то есть способ, нужно сделать следующее:
1. Скопируйте файл вашей темы index.php, и сохраните его под именем home.php
2. Далее в этом файле, перед началом цикла нужно вставить вот такую строчку:
3. А потом, внутри цикла нужно вставить код, приведенный в этой статье
Если все сделали правильно, будет работать.
Интересно, но не понятно зачем. По моему блог без комментариев под записью, это как-то и не блог чтоли =\
Совершенно верно, совсем не блог. Комментарии на отдельной странице обычно нужны тем, кто делает на вордпрессе обычный сайт.
Да это не блог а обычный сайт визитка! данный вопрос я решил немного проще в настройках пресса просто сделал главную статичной, а вывод постов перенаправил на другую страничку. при этом у меня не выводились коменты, это меня и возмущало, данный вопрос решил прописав в нужном месте в page.php, этой строки там не хватало…
прописал вот эту строчку
не видно ;)
блог урезал код
более простое решение
вот на этой странице есть более простое решение данного вопроса, может быть будет полезно!
Скажите лучше как плагин называется для кода который у Вас на блоге?
Имя плагина скажите пожалуйста
Здравствуйте, помогите, у нас есть сайт, но я никак не могу добавить туда комментарии, к определенной странице чтобы люди могли их оставлять, помогите пожалуйста
Сейчас прочитала вашу статью http://euro-usd.ru/2009/04/30/wordpress-dobavlyaem-kommentarii-k-stranice/
Зашла в редактор, далее нашла (single.php) и там в файле вот такое вот содержание:
Т.е я так поняла что фкнкция отвечающая за вывод комментраиев у нас отсутствует? что нужно сделать чтобы на нужные нам страницы можно было добавить комментарий?
Я не знаю в чем ваша проблема, во-первых потому что код не добавился, во-вторых, потому что для этого нужно полностью смотреть тему. Единственное что могу вам посоветовать, следующее: активируйте стандартную тему вордпресс twentyeleven, и попробуйте добавить комментарий. Если он добавится, значит проблема с вашим шаблоном, сравните файлы single.php, page.php (если у вас есть такой в теме), index.php, и добавьте отсутствующий код.
А указанная вами статья по ссылке, вовсе не моя ;)
Здравствуйте, подскажите пожалуйста, что и куда нужно прописать в редактор темы WordPress, что бы текст записей на главной странице частично скрывался. Вот адрес DizainStar.ru.
А как сделать так, чтобы на сайте одностраничнике были подключены комментарии WP.
то есть есть блог, но эта страница как бы отдельная, ни с че не связана. Но комментарии там можно оставлять через станд. форму вп-комментариев?
задумка такая, что эту страницу буду ддавать только по просьбе, но комментарование там обязательно нужно
Здравствуйте, у меня такой вопрос, есть сайт на wordpress двуязычный (русский и украинский), это сайт мед.клиники на сайте есть страница с отзывами, но отзивы только на русской версии сайта, можно сделать так чтобы когда пишеш отзыв на русской версии он атоматически отсылался и на укр. версию сайта ми наоборот?
Здравствуйте !
Подскажите, как вывести все комментарии ко всем записям на отдельной странице в меню, например «Отзывы» — 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 на какой на какой странице выводить комментарии
Здравствуйте! Спасибо за статью! Сделала все, как вы описали, все получилось. Единственная проблема — ссылка «Ответить» перебрасывает на страницу с постом. Подскажите, пожалуйста, как поправить? Уже очень много информации перерыла, не могу найти решения. Заранее спасибо.
А как-то обойтись без такой записи — ?comments=1, можно ли сделать просто слеш и comments без параметров?
Спасибо, установили клиенту. Наконец он доволен.
Но это проблема разрешима, нужно добавить одну строчку, перед закрывающим теэгом , в шаблоне comments:
?
1
<input type="hidden" name="redirect_to" value="» />
у меня нет тега форм в шаблоне coments
А можно как-то его интегрировать в плагин Woocommerce?
Грасиас. После часа перелопачивания получилось установить. Спасибо на мануале.
Здравствуйте при переходе на каждую страничку на вашем блоге из браузера chrome у меня происходит ошибка, а если зайти с exploer то работает, почему так происходит?
Сделал по данной инструкции. Ссылка «Ответить» перекидывает на страницу с постом. Где и как поправить?
можно использовать внутри Цикла WordPress или за пределами Цикла WordPress, но на отдельной странице поста (single.php). Или можно использовать где угодно, если указать какой именно пост нужно проверить.