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

коротко и полезно о веб-разработке

Menu Close

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']; ?>" />

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

Рассказать друзьям

Понравилась статья? Лучший способ сказать спасибо - поделиться ссылкой в социальных сетях: