Улучшение комментариев WordPress

Привет всем, на связи снова Дмитрий Новоселов. Давно я что-то не писал, это потому что занимался улучшением комментариев. И вот закончив решил рассказать как сделать древовидные комментарии которые у меня на сайте. Вот скриншот.

komment

Что будем разбирать в статье?

  • Подключение древовидных комментариев при помощи плагина
  • Древовидные комментарии без плагина(когда тема не поддерживает древовидность)
  • Подтягивание формы комментирования при нажатии кнопки ответить
  • Делаем ссылки при помощи скрипта, чтобы поисковик не индексировал и не было дублей страниц.
  • Подключение плагинов для улучшения комментирования
  • Подключение стилей

Подключение древовидных комментариев при помощи плагина

Для тех у кого тема не поддерживает древовидные комментарии был разработан специальный плагин WordPress Thread Comment

 komment1

Подключение его решает сразу несколько проблем, не надо копаться среди файлов и настраивать в ручную древовидные комментарии, если у вас они не подключены, так же вы обезопасите себя от дублей страниц, так как кнопка «Ответить» реализована через скрипт и нет replytocom.

Но есть и недостатки,  комментарий ответа автоматически помещается в комментарий на который идет ответ. Надеюсь поняли о чем я, чтобы без скриншотов =) Еще одинм недостатком является, то что при нажатии кнопки «Ответить» форма комментирования может не подтягиваться для удобства и эту проблему придется править залезая в код.

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


Древовидные комментарии без плагина (когда тема не поддерживает древовидность)

Когда я реализовывал комментарии на своем блоге, то плагин работал не совсем корректно и я решил настроить (древовидные комментарии без плагина). И тут меня ждал мозговой штурм, с кучей препятствий, но я его преодолел… Перейдем к тому что я делал.

!!! Предупреждаю заранее!!! Сделайте резервные копии следующих файлов

(comments.php, functions.php) находятся в теме wp-content/themes/название вашей темы

(comment-template.php) находится в ядре блога и любые изменения в этом файле при обновлении версии worpress будут сходить на нет!!! Если вы не хотите заново править код после каждого обновления, то скопируйте функцию в которой делаете правки в файл functions.php. Все эти действия надо делать аккуратно, так как могут возникнуть ошибки сайта!!! 

Предупредить предупредил, а теперь в путь. =)

Изначально в файле ядра comment-template.php находится функция отвечающая за вывод комментариев, так как мы будем делать свои древовидные комментрии, то у нас она будет отличаться и чтобы не было проблем, вы добавим свою функцию, но в файл functions.php

<?php
function mytheme_comment($comment, $args, $depth)
{
	$GLOBALS['comment'] = $comment;
	switch ( $comment->comment_type ) :
		case '' :
?>
	<li <?php comment_class(); ?> style="list-style: inherit;">
		<div id="comment-<?php comment_ID(); ?>" <?php comment_class(); ?>>
			<div class="comment-author vcard">
				<?php echo get_avatar( $comment->comment_author_email, $args['avatar_size']); ?>
			</div>
			<div class="main-comment">
				<?php if ($comment->comment_approved == '0') : ?>
					<div class="comment-awaiting-verification"><?php _e('Your comment is awaiting moderation.') ?></div>
				<?php endif; ?>
				
				<?php printf(__('<span class="fn">%s</span> '), get_comment_author_link()) ?>
				<?php comment_text() ?>
				<div class="reply">
				
				<div class="comment_info">
					<a href="<?php echo esc_url( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?></a>
					<?php comment_reply_link( array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth'], 'reply_text' => 'Ответить')) ) ?>
					<?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?>
				</div>
			</div>
		</div>
	</div>
<?php
		break;
		case 'pingback'  :
		case 'trackback' :
?>
			<li class="post pingback">
				<?php comment_author_link(); ?>
				<?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?>

<?php
		break;
	endswitch;
} ?>

Не забудьте что файл php и поэтому если вы вставите код в середину, то надо будет сделать правильное разделение! Функцию мы прописали, теперь надо ее вызвать для этого в файле comments.php надо сделать следующие изменения.

Находим блок с main-list-comments , в разных темах содержимое этого блока реализовано по разному. Но теперь когда мы добавили нашу функцию, то нужно просто заменить этот блок и все его содержимое на:

<div class="main-list-comments">
	<ul class="commentlist">
		<?php wp_list_comments('callback=mytheme_comment'); ?>
	</ul>
</div>

Если у вас в этом блоке было много кода, не пугайтесь! Мы все равно сделали резервную копию.

По идеи древовидность должна работать, но для этого она должна быть включена в настройках WordPress

komment2

Внимательно прочтите все настройки!!!

Пол пути пройдена! =)


 Подтягивание формы комментирования при нажатии кнопки «ответить»

Если мы сделали все правильно, то древовиные комментарии должны работать, но есть одно «НО»

При нажатии кнопки «ответить» страница автоматически прокручивается до самой формы, что не очень удобно, лучше бы чтобы она сама появлялась под комментарием. Вот это мы сейчас и будем делать.

Для этого нам понадобиться следующий код

<?php
if ( is_singular() && get_option( 'thread_comments' ) )
wp_enqueue_script( 'comment-reply' );
wp_head();
?>

Его можно вставить в файл шапки header.php между тегами head либо в functions.php

По идеи должно работать, но если не пашет, то вам надо подключить скрит, который подтягивает форму комментариев

<script type="text/javascript" src="/wp-includes/js/comment-reply.js"></script>

Его так же добавляем в шапку рядом с другими скриптами header.php, если у вас есть отдельный файл с подключением всех скриптов то можете вставить его туда.

Не забудь те проверить наличие указанного в пути файла, если его не будет то скачайте!

Пока я не добавил эту строчку, подтягивание у меня не работало.


 Делаем ссылки при помощи скрипта, чтобы поисковик не индексировал и не было дублей страниц.

Все хорошо комментарии работают, но в конце приписывается replytocom, что в результате создает дубли страниц, а это приводит к тому что падает трафик, сайт попадает под фильтры поисковых систем. По этому я решил, сделать ссылки «ответить», через скрипт. Я это реализовывал через ядро, но вы можете вывести функцию в functions.php , но для этого вам придется переименовывать обращения к новой функции…(геморой).

Поэтому я решил, что при обновлении быстро перенесу нужный код в ядро…, но знайте это не правильно! Лучшим вариантом создать собственный плагин, мне пока до такого рано.

От воды к коду. В файле comment-template.php находим функцию get_post_reply_link , далее находим в этой функции переменную $link, ее то мы и будем изменять. Вместо того кода, что там есть вставляем

		$link = sprintf( "<span rel='nofollow' class='comment-reply-link' href='%s' onclick='%s'>%s</span>",
			get_permalink( $post->ID ) . '#' . $args['respond_id'],
			$onclick,
			$args['reply_text']
		);

Теперь ссылки реализованы через скрипт и дублирования страниц не должно быть.


 Подключение плагинов для улучшения комментирования

Первым плагином я подключил Comment Validation, просто находите через поиск либо качаете и загружаете. После активации он начинает работать. Работал нормально, но меня не устраивало, то что он выводил текст ошибки на английском. Для этого я слел некоторые правки в скриптах. Можете скачать 

Следующим плагином WP Russian Quicktags он добавляет кнопочки для тегов, например надо вставить код, или сделать текст жирным. Нам мой взгляд простой и полезный плагин.

Так же есть плагин TinyMCEComments, который чем то похож на предыдущий только более функционален.

Очень часть люди используют смайлики при комментировании, поэтому следующим плагином станет Qip smiles  качаете плагин и устанавливаете, по инструкции как на сайте. Смайлы можно менять в папке плагина.

Так же полезным плагином будет Subscribe To Comments он будет оповещать о комментариях на почту комментатора.

Эти плагины я счел необходимыми в первую очередь, другие на мой взгляд будут лишний раз нагружать сервер и невсегда корректно работают. Есть плагины которые благодарят за комментарий, отправляют на почту уведомления о то что комментарий одобрен и многие другие. Если будет необходимость, как-нибудь сделаю обзор плагинов для комментирования. Ладно пора уже переходить к украшению наших комментариев.


 Подключение стилей

Вот мы сделали все предыдущие действия, а комментарии отображаются все равно через одно место…

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

#author, #email, #url {
	margin:3px 10px 3px 0;
	float:left;
	height:25px;
	color:#555;
	padding:0 12px 0 12px;
	background-color:#dedede;
	font-size:16px;
	border:1px solid #bbb;
	border-radius:12px;
	-o-border-radius:12px;
	-moz-border-radius:12px;
	-webkit-border-radius:12px;
	-ms-border-radius:12px;
	width:150px;
	box-shadow:0 1px 1px #fff;
	-moz-box-shadow:0 1px 1px #fff;
	-webkit-box-shadow:0 1px 1px #fff;
	-o-box-shadow:0 1px 1px #fff;
	-ms-box-shadow:0 1px 1px #fff;
}
#comment {
	width:95%;
	height: 70px;
	color:#555;
	padding:12px;
	background-color:#dedede;
	border:1px solid #bbb;
	border-radius:12px;
	-o-border-radius:12px;
	-moz-border-radius:12px;
	-webkit-border-radius:12px;
	-ms-border-radius:12px;
	box-shadow:0 1px 1px #fff;
	-moz-box-shadow:0 1px 1px #fff;
	-webkit-box-shadow:0 1px 1px #fff;
	-o-box-shadow:0 1px 1px #fff;
	-ms-box-shadow:0 1px 1px #fff;
	margin:3px 0 3px 0;
	font-size:16px;
	font-family:Tahoma, Arial;
}
#author:focus, #email:focus, #url:focus, #comment:focus {
	box-shadow:0 0 5px #007efd;
	-moz-box-shadow:0 0 5px #007efd;
	-webkit-box-shadow:0 0 5px #007efd;
	-o-box-shadow:0 0 5px #007efd;
	-ms-box-shadow:0 0 5px #007efd;
	border:1px solid #777;
	color:#555;
}
ul.commentlist  { font-size:14px;font-family:arial;list-style:none;padding:0;text-indent:0;margin-bottom:20px;
list-style: square outside;
margin: 0px 30px 0px 30px;
padding: 5px 0px 0px 5px;
}

ul.commentlist li.comment { padding:10px 10px 10px 10px; list-style: inherit;}
ul.commentlist li div.comment-author { font-weight: bold; }
ul.commentlist li div.vcard cite.fn a.url { text-decoration: none; }
ul.commentlist li div.vcard cite.fn a:hover.url { color: #313131; text-decoration: none; }
ul.commentlist li div.vcard img.avatar { border:1px solid #d6d6d6;width:50px;height:50px;float:left;padding:3px;background:#f4f4f4;margin-right:10px; position: absolute; border-radius: 45px }
ul.commentlist li div.comment-meta { font-family:arial;color:#818181;text-shadow:0 1px 0 #fff; }
ul.commentlist li p { color:#606060; clear:both;margin:20px 0 10px 0; }
ul.commentlist li ul { list-style: inherit;}
ul.commentlist li ul.children { list-style:none; text-indent:0; }
ul.commentlist li ul.children li.bypostauthor  {background:none;}

ul.commentlist li div.comment-wrap {background: #F5F6F8;padding: 10px;list-style: inherit;border:2px solid #d3d3d3 ; border-radius: 10px;
font-family: 'Open Sans', sans-serif;
color: #0169D3;
font-size: 14px;
list-style: inherit;
}
ul.commentlist li.pingback { }
ul.commentlist li.bypostauthor { }
ul.commentlist li.comment-author-admin div img {border:3px solid #EA8649;}

.main-comment
{
 padding-left: 75px; 
}
.comment-text {
	padding:5px 10px 0 0;
	display:block;
}
.comment-text p {
	padding:5px 10px 0 0;
	display:block;
	font-size:16px;
}
#respond input#submit {
	color:#444;
	font-weight:bold;
	margin:10px 0 10px 0;
	padding:5px 8px 5px 8px;
	border:1px solid #888;
	border-radius:12px;
	-o-border-radius:12px;
	-moz-border-radius:12px;
	-webkit-border-radius:12px;
	-ms-border-radius:12px;
	background: #c1c1c1; /* Old browsers 
	background: -moz-linear-gradient(top, #eeeeee 0%, #c1c1c1 100%); /* FF3.6+ */
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#c1c1c1)); /* Chrome,Safari4+ */
	background: -webkit-linear-gradient(top, #eeeeee 0%,#c1c1c1 100%); /* Chrome10+,Safari5.1+ */
	background: -o-linear-gradient(top, #eeeeee 0%,#c1c1c1 100%); /* Opera 11.10+ */
	background: -ms-linear-gradient(top, #eeeeee 0%,#c1c1c1 100%); /* IE10+ */
	background: linear-gradient(top, #eeeeee 0%,#c1c1c1 100%); /* W3C */
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#c1c1c1',GradientType=0 ); /* IE6-9 */
}
#respond input#submit:hover {
	color:#666;
	background: #e3e3e3; /* Old browsers */
	background: -moz-linear-gradient(top, #e3e3e3 0%, #ccc 100%); /* FF3.6+ */
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e3e3e3), color-stop(100%,#ccc)); /* Chrome,Safari4+ */
	background: -webkit-linear-gradient(top, #e3e3e3 0%,#ccc 100%); /* Chrome10+,Safari5.1+ */
	background: -o-linear-gradient(top, #e3e3e3 0%,#ccc 100%); /* Opera 11.10+ */
	background: -ms-linear-gradient(top, #e3e3e3 0%,#ccc 100%); /* IE10+ */
	background: linear-gradient(top, #e3e3e3 0%,#ccc 100%); /* W3C */
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e3e3e3', endColorstr='#cccccc',GradientType=0 ); /* IE6-9 */
}

#content ul li div .commentlist
{
	list-style: inherit;
}

.comment_info
{
font-family: 'Open Sans', sans-serif;
color: #818181;
font-size: 10px;
}
.comment-respond
{
	border: 5px solid;
	border-radius: 10px;
	margin-top: 10px;
	background: #E0E0E0;
	padding: 20px;
}


#com_data .field {
float: left;
width: 33.33%;
}

div .comment  .comment-author-admin
{
	background: #E0E0E0;
}

div .alt  
{
	padding: 20px;
	background: #F5F6F8;
	border-radius: 10px;
	border:3px solid;
	font-family: 'Open Sans', sans-serif;
	color: #818181;
	font-size: 14px;
}

.fn
{
	color: #026acb;
}

.field p span {
position: absolute;
top: 3px;
left: 0;
display: block;
width: 25px;
height: 23px;
background: #D9D9D9 url("/wp-content/themes/my/images/name_email_url.png") 0 0 no-repeat;
border-radius: 4px 0px 0px 4px;
border: 1px solid #9C9C9C;
}

#com_data {
z-index: 1;
position: relative;

}

#com_data input {
float: left;
width: 80%;
height: 23px;
line-height: 23px;
vertical-align: middle;
border-radius: 4px;
border: 1px solid #9C9C9C;
padding: 0 0 0 29px;
box-shadow: 0px 1px 1px #C4C4C4;
background: #eee;
color: #666;
outline: 0px;
}

#com_data .email {
background-position: 5px -17px;
}

#com_data p {
position: relative;
margin-right: 25px;
}

#com_data .author {
background-position: 5px -40px;
}
#com_data .url {
background-position: 5px 4px;
}

#com_data .email {
background-position: 5px -17px;
}

Возможно какие-то стили я захватил лишние когда буду заниматься оптимизацией удалю, здесь стили как для комментариев, так и для формы комментирования обратите внимание на файл name_email_url.png  он для отображения иконок в форме комментирования, его надо залить на сервер и указать свой путь до него.

Стили прописали, но если у вас подключается стандартная форма комментирования, то надо подключить свою!!!

В файле comments.php ищем строчку

<?php comment_form(); ?>

Может быть такое, что у вас вместо этой строчки будет сама форма комментирования она заключена в тег form, в обоих случаях заменяем на следующую строчку

<?php my_comment_form(); ?>

Теперь нам надо добавить эту новую функцию в файл functions.php

Выглядит она так

function my_comment_form( $args = array(), $post_id = null ) {
	if ( null === $post_id )
		$post_id = get_the_ID();

	$commenter = wp_get_current_commenter();
	$user = wp_get_current_user();
	$user_identity = $user->exists() ? $user->display_name : '';

	$args = wp_parse_args( $args );
	if ( ! isset( $args['format'] ) )
		$args['format'] = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml';

	$req      = get_option( 'require_name_email' );
	$aria_req = ( $req ? " aria-required='true'" : '' );
	$html5    = 'html5' === $args['format'];
	$fields   =  array(
		'author' => '<div id="com_data"><div class="field"><p>' . 
					'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /><span class="author"></span></p></div>',
		'email'  => '<div class="field"><p>' .
					'<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30" aria-describedby="email-notes"' . $aria_req . ' /><span class="email"></span></p></div>',
		'url'    => '<div class="field"><p>' .
					'<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /><span class="url"></span></p></div></div>',
	);

	$required_text = sprintf( ' ' . __('Required fields are marked %s'), '<span class="required">*</span>' );

	/**
	 * Filter the default comment form fields.
	 *
	 * @since 3.0.0
	 *
	 * @param array $fields The default comment fields.
	 */
	$fields = apply_filters( 'comment_form_default_fields', $fields );
	$defaults = array(
		'fields'               => $fields,
		'comment_field'        => '<p class="comment-form-comment">' . '<textarea id="comment" name="comment" cols="45" rows="8"  aria-required="true"></textarea>',
		/** This filter is documented in wp-includes/link-template.php */
		'must_log_in'          => '<p class="must-log-in">' . sprintf( __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>',
		/** This filter is documented in wp-includes/link-template.php */
		'logged_in_as'         => '<p class="logged-in-as">' . sprintf( __( 'Logged in as <a href="%1$s">%2$s</a>. <a href="%3$s" title="Log out of this account">Log out?</a>' ), get_edit_user_link(), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>',
		'comment_notes_before' => '<p class="comment-notes"><span id="email-notes">' . __( 'Your email address will not be published.' ) . '</span>'. ( $req ? $required_text : '' ) . '</p>',
		'comment_notes_after'  => '<p class="form-allowed-tags" id="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '</code>' ) . '</p>',
		'id_form'              => 'commentform',
		'id_submit'            => 'submit',
		'class_submit'         => 'submit',
		'name_submit'          => 'submit',
		'title_reply'          => __( 'Leave a Reply' ),
		'title_reply_to'       => __( 'Leave a Reply to %s' ),
		'cancel_reply_link'    => __( 'Cancel reply' ),
		'label_submit'         => __( 'Post Comment' ),
		'format'               => 'xhtml',
	);

	/**
	 * Filter the comment form default arguments.
	 *
	 * Use 'comment_form_default_fields' to filter the comment fields.
	 *
	 * @since 3.0.0
	 *
	 * @param array $defaults The default comment form arguments.
	 */
	$args = wp_parse_args( $args, apply_filters( 'comment_form_defaults', $defaults ) );

	?>
		<?php if ( comments_open( $post_id ) ) : ?>
			<?php
			/**
			 * Fires before the comment form.
			 *
			 * @since 3.0.0
			 */
			do_action( 'comment_form_before' );
			?>
			<div id="respond" class="comment-respond">
				<h3 id="reply-title" class="comment-reply-title"><?php comment_form_title( $args['title_reply'], $args['title_reply_to'] ); ?> <small><?php cancel_comment_reply_link( $args['cancel_reply_link'] ); ?></small></h3>
				<?php if ( get_option( 'comment_registration' ) && !is_user_logged_in() ) : ?>
					<?php echo $args['must_log_in']; ?>
					<?php
					/**
					 * Fires after the HTML-formatted 'must log in after' message in the comment form.
					 *
					 * @since 3.0.0
					 */
					do_action( 'comment_form_must_log_in_after' );
					?>
				<?php else : ?>
					<form action="<?php echo site_url( '/wp-comments-post.php' ); ?>" method="post" id="<?php echo esc_attr( $args['id_form'] ); ?>" class="comment-form"<?php echo $html5 ? ' novalidate' : ''; ?>>
						<?php
						/**
						 * Fires at the top of the comment form, inside the form tag.
						 *
						 * @since 3.0.0
						 */
						do_action( 'comment_form_top' );
						?>
						<?php if ( is_user_logged_in() ) : ?>
							<?php
							/**
							 * Filter the 'logged in' message for the comment form for display.
							 *
							 * @since 3.0.0
							 *
							 * @param string $args_logged_in The logged-in-as HTML-formatted message.
							 * @param array  $commenter      An array containing the comment author's
							 *                               username, email, and URL.
							 * @param string $user_identity  If the commenter is a registered user,
							 *                               the display name, blank otherwise.
							 */
							echo apply_filters( 'comment_form_logged_in', $args['logged_in_as'], $commenter, $user_identity );
							?>
							<?php
							/**
							 * Fires after the is_user_logged_in() check in the comment form.
							 *
							 * @since 3.0.0
							 *
							 * @param array  $commenter     An array containing the comment author's
							 *                              username, email, and URL.
							 * @param string $user_identity If the commenter is a registered user,
							 *                              the display name, blank otherwise.
							 */
							do_action( 'comment_form_logged_in_after', $commenter, $user_identity );
							?>
						<?php else : ?>
							<?php echo $args['comment_notes_before']; ?>
							<?php
							/**
							 * Fires before the comment fields in the comment form.
							 *
							 * @since 3.0.0
							 */
							do_action( 'comment_form_before_fields' );
							foreach ( (array) $args['fields'] as $name => $field ) {
								/**
								 * Filter a comment form field for display.
								 *
								 * The dynamic portion of the filter hook, `$name`, refers to the name
								 * of the comment form field. Such as 'author', 'email', or 'url'.
								 *
								 * @since 3.0.0
								 *
								 * @param string $field The HTML-formatted output of the comment form field.
								 */
								echo apply_filters( "comment_form_field_{$name}", $field ) . "\n";
							}
							/**
							 * Fires after the comment fields in the comment form.
							 *
							 * @since 3.0.0
							 */
							do_action( 'comment_form_after_fields' );
							?>
						<?php endif; ?>
						<?php
						/**
						 * Filter the content of the comment textarea field for display.
						 *
						 * @since 3.0.0
						 *
						 * @param string $args_comment_field The content of the comment textarea field.
						 */

						echo apply_filters( 'comment_form_field_comment', $args['comment_field'] );
						?>
						<?php if (function_exists('qipsmiles')) qipsmiles('ru'); ?>
						<p class="form-submit">
							<input name="<?php echo esc_attr( $args['name_submit'] ); ?>" type="submit" id="<?php echo esc_attr( $args['id_submit'] ); ?>" class="<?php echo esc_attr( $args['class_submit'] ); ?>" value="<?php echo esc_attr( $args['label_submit'] ); ?>" />
							<?php comment_id_fields( $post_id ); ?>
						</p>
						<?php
						/**
						 * Fires at the bottom of the comment form, inside the closing </form> tag.
						 *
						 * @since 1.5.0
						 *
						 * @param int $post_id The post ID.
						 */
						do_action( 'comment_form', $post_id );
						?>
					</form>
				<?php endif; ?>
			</div><!-- #respond -->
			<?php
			/**
			 * Fires after the comment form.
			 *
			 * @since 3.0.0
			 */
			do_action( 'comment_form_after' );
		else :
			/**
			 * Fires after the comment form if comments are closed.
			 *
			 * @since 3.0.0
			 */
			do_action( 'comment_form_comments_closed' );
		endif;
}
?>

В этот же код я вставил строчку отображения смайликов.

Вот вроде бы и все. Надеюсь кому-то будет полезна информация, возникнут вопросы пишите!