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(‘« %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(); ?>
[/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(‘« %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(); ?>
[/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]
Возможно представленное решение не отличается изяществом, зато оно гарантированно работает.
Leave a Reply to Татьяна Cancel reply