Wp list comments


Здравствуйте, уважаемые читатели блога Goldbusinessnet.com! Сегодняшний пост будет посвящен настройке комментариев для сайта WordPress c помощью редактирования файлов текущей темы (тут о загрузке и установке тем для Вордпресс подробнее) и без использования плагинов. Я уже неоднократно отмечал, что замена расширений Вордпресс кодами дает возможность снизить нагрузку на сервер хостера и тем самым дать лишний плюс в деле оптимизации проекта.

«>

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

Кстати, несмотря на мое стремление к сокращению расширений, некоторые из них весьма функциональны и полезны. Кроме того, ведь должен всегда быть выбор, поэтому предлагаю все-таки ознакомиться с материалом по настройке WordPress комментариев с помощью плагинов Comment form Quicktags и WP Monalisa. Также неплохо бы обеспечить читателям возможность подписаться на комментарии с помощью расширения Subscribe to Comments.


Ко всему нужно подходить взвешенно, есть расширения, без которых точно невозможно обойтись. Если коснуться темы оформления комментариев, то обязательным, на мой скромный взгляд, безусловно, является плагин WordPress Akismet для защиты от спама в комментариях. С ним вы будете чувствовать себя комфортно.

Но продолжим. В общем-то, древовидные комментарии, пример которых вы можете наблюдать на блоге Goldbusinessnet.com, на мой взгляд очень удобны и функциональны как для админа, так и для читателей, поскольку позволяют легко отслеживать ветки общения с тем или иным пользователем. Далее я объясню, как отредактировать коды файлов вашей темы, чтобы настроить комментарии WordPress на свой вкус.

Настройка комментариев для сайта WordPress посредством редактирования файлов comments.php и functions.php

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


В чем же заключается эта гибкость? Да в том, что все изменения, которые вы будете вносить в файлы темы WordPress, сохранятся и после обновления текущей версии движка. В интернете очень часто можно встретить советы, и весьма конструктивные, которые предполагают редактирование файлов ядра Вордпресс (например, в нашем случае, comment-template.php, comment.php, отвечающие за вывод комментариев).

Но все дело в том, что после обновления движка все эти изменения сойдут на нет и придется снова их повторять, что крайне неудобно. А вот однажды отредактированные файлы шаблона вашей темы (для нашего случая это файлы single.php, comment.php, functions.php) останутся неизменными и после обновления.

Прежде, чем приступить к описанию редактирования файлов темы, которые выводят комментарии WordPress, хочу предупредить, что перед внесением изменений обязательно сохраняйте копии старых файлов, чтобы подстраховаться. Если даже напортачите, всегда сможете вернуться к предыдущему варианту. Лучше всего использовать для этих целей функциональный редактор notepad++, который просто незаменим в качестве инструмента вебмастера.

Итак, перехожу к делу. Движок WordPress генерирует отображение комментариев на блоге по умолчанию. Но для того, чтобы обеспечить выше упомянутое гибкое решение, можно составить свой вариант вывода комментариев с помощью функции mytheme_comment, содержание которой я позаимствовал на блоге уважаемого мной Андрея Морковина. Эту функцию нужно вставить в файл functions.php текущей темы (чтобы не ошибиться, вставьте в самый конец):


  function mytheme_comment($comment, $args, $depth)  {  	$GLOBALS['comment'] = $comment;  	switch ( $comment->comment_type ) :  		case '' :  ?>  	 <li <?php comment_class(); ?> id=&amp;quot;li-comment-<?php comment_ID() ?>&amp;quot;>  			<div id=&amp;quot;comment-<?php comment_ID(); ?>&amp;quot;>  				<div class=&amp;quot;comment-author vcard&amp;quot;>  					<?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?>  					<?php echo get_avatar( $comment->comment_author_email, $args['avatar_size']); ?>  					<?php printf(__('<cite class=&amp;quot;fn&amp;quot;>%s</cite> <span class=&amp;quot;says&amp;quot;>says:</span>'), get_comment_author_link()) ?>  				</div>    				<div class=&amp;quot;comment-meta commentmetadata&amp;quot;>  					<a href=&amp;quot;<?php echo esc_url( get_comment_link( $comment->comment_ID ) ) ?>&amp;quot;><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a>  				</div>    <?php if ($comment->comment_approved == '0') : ?>  				<div class=&amp;quot;comment-awaiti.  

t;post pingback&amp;quot;> <?php comment_author_link(); ?> <?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?> <?php break; endswitch; }

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

Однако пока эта функция не работает. Чтобы ее задействовать, нужно обратиться к файлу comments.php и найти там следующую строчку (напомню, используйте редактор notepad++, который очень удобен для редактирования):

&amp;amp;lt;?php wp_list_comments(); ?&amp;amp;gt;

Теперь в качестве дополнения укажем массив $args для функции wp_list_comments и несколько необходимых строк этого массива со значениями. Вся эта конструкция будет выглядеть следующим образом:

<?php $args = array(  	 'avatar_size' => 45,  	 'reply_text' => 'Ответить на комментарий',  	 'callback' => 'mytheme_comment',   ); ?>  	<ul class=&quot;comments-list&quot;><?php wp_list_comments($args); ?></ul>

Где строчки со значениями означают следующее:


  • 2 строка — увеличивает размер аватара (сущность которого — граватар, если он, конечно, создан пользователем) до 45 пикселов (при желании указать свой), в то время как размером по умолчанию является величина в 32 пиксела. Если вы хотите оставить дефолтный размер, то эту строчку можно удалить;
  • 3 строка — выводит текст ссылки для ответа на комментарий;
  • 4 строка — значение ‘callback’ указывает, что все комментарии будут выводится в соответствии с функцией ‘mytheme_comment’, содержание которой было прописано в файле functions.php. Если эту строчку удалить, то WordPress будет обращаться к файлам ядра, где находится запись стандартного вывода комментариев.

Это далеко не все, что можно сделать, хотя для меня этого оказалось пока достаточно. Со всеми возможными значениями массива $args для функции wp_list_comments можете познакомиться на странице Codex WordPress.

Очень часто необходимо поменять надпись с числом комментариев, которая, к сожалению, по умолчанию выводится некорректно на странице со статьей. Я имею ввиду неправильное склонение, типа «4 комментариев», которое режет глаз и нарушает правила грамматики русского языка. Для этого в месте, куда необходимо вывести данную надпись, необходимо вставить вместо кода, отвечающего за вывод комментариев, следующую строчку в файл comments.php:


<?php plural_form(get_comments_number(),array('комментарий','комментария','комментариев'));?>

Обычно она следует за такой строкой:

<?php if ($comments) : ?>

Кроме этого, необходимо прописать соответствующую функцию в файле functions.php, чтобы все это дело заработало (можно опять же это сделать в самом конце после окончания записи вставленной ранее функции mytheme_comment):

function plural_form($number, $after) {   $cases = array (2, 0, 1, 1, 1, 2);   echo $number.' '.$after[ ($number%100&amp;gt;4 &amp;amp;amp;&amp;amp;amp; $number%100&amp;lt;20)? 2: $cases[min($number%10, 5)] ];   }

Эта функция позволит отображать записи с числом комментариев в правильном склонении: «1 комментарий», «2 комментария», «5 комментариев» и т.д. Чтобы у начинающих вебмастеров не возникла путаница в голове, дам вариант файла comments.php моей темы после всех этих манипуляций:

<?php // Do not delete these lines  	if (post_password_required()) {    echo '<p class=&amp;quot;nocomments&amp;quot;>This post is password protected.  

ter the password to view comments.</p>'; return; } $oddcomment = &amp;quot;graybox&amp;quot;; ?> <!-- You can start editing here. --> <?php if ($comments) : ?> <h5><?php plural_form(get_comments_number(),array('комментарий','комментария','комментариев'));?> </h5> <?php $args = array( 'avatar_size' => 45, 'reply_text' => 'Ответить на комментарий', 'callback' => 'mytheme_comment', ); ?> <ul class=&amp;quot;comments-list&amp;quot;><?php wp_list_comments($args); ?></ul> <?php paginate_comments_links() ?> <?php else:?> <?php if (comments_open()) : ?> <!-- If comments are open, but there are no comments. --> <?php elseif (!is_page()) : // comments are closed ?> <!-- If comments are closed. --> <h4>Comments are closed.</h4> <?php endif; ?> <?php endif; ?> <?php if (comments_open()) : ?> <?php $comments_args = array( 'comment_notes_after' => '', ); ?> <?php comment_form($comments_args); ?> <?php endif; ?> <?php show_manual_subscription_form(); ?>

Обращаю ваше внимание на то, что полностью копировать содержание comments.php я не советую, поскольку темы у всех разные. Просто внимательно посмотрите, куда вставить массив для для функции wp_list_comments (строки 13-17) и plural_form (строка 11). Далее даю обе функции, которые мы вставили в файл functions.php:


<?php  function mytheme_comment($comment, $args, $depth)  {  	$GLOBALS['comment'] = $comment;  	switch ( $comment->comment_type ) :  		case '' :  ?>  	 <li <?php comment_class(); ?> id=&amp;quot;li-comment-<?php comment_ID() ?>&amp;quot;>  			<div id=&amp;quot;comment-<?php comment_ID(); ?>&amp;quot;>  				<div class=&amp;quot;comment-author vcard&amp;quot;>  					<?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?>  					<?php echo get_avatar( $comment->comment_author_email, $args['avatar_size']); ?>  					<?php printf(__('<cite class=&amp;quot;fn&amp;quot;>%s</cite> <span class=&amp;quot;says&amp;quot;>says:</span>'), get_comment_author_link()) ?>  				</div>    				<div class=&amp;quot;comment-meta commentmetadata&amp;quot;>  					<a href=&amp;quot;<?php echo esc_url( get_comment_link( $comment->comment_ID ) ) ?>&amp;quot;><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a>  				</div>    <?php if ($comment->comment_approved == '0') : ?>  				<div class=&amp;quot;comment-awaiting-verification&amp;.  

quot;> <?php comment_author_link(); ?> <?php edit_comment_link( __( 'Редактировать' ), ' ' ); ?> <?php break; endswitch; } function plural_form($number, $after) { $cases = array (2, 0, 1, 1, 1, 2); echo $number.' '.$after[ ($number%100>4 &amp;amp;&amp;amp; $number%100<20)? 2: $cases[min($number%10, 5)] ]; }

Итак, нашими стараниями мы получили свой вариант комментариев, которые будут выводится движком WordPress и кои в дальнейшем можно будет редактировать и подстраивать под себя. А с помощью вставленной функции plural_form мы добились, что надпись с числом комментариев будет отображаться в соответствии с правилами грамматики русского языка.

Стили CSS для оформления комментариев WordPress

Ну, а теперь необходимо призвать на помощь стили CSS, чтобы соответственно вашему желанию придать нужный вид комментариям. Для этих целей очень подходит замечательный плагин Firebug для вэб-браузера Мазила Фаерфокс (здесь информация, как скачать и настроить этот популярный браузер), который просто незаменим при редактировании HTML и CSS кода и аналоги которого уже встроены во всех последних модификациях других популярных web-браузеров (Опера, IE, Google Chrome).


Для вывода комментариев WordPress по умолчанию прописаны соответствующие классы и идентификаторы, правила CSS для которых можно изменить путем редактирования файла style.css. Если открыть любую страницу Вордпресс блога, где есть комментарии, то с помощью выше упомянутого Firebug можно поэкспериментировать путем редактирования стилей с оформлением выводимых WordPress комментариев. Я же воспользовался его аналогом в Хроме:

«>

Так у меня на блоге выглядели блоки древовидных комментариев, которым соответствовали стили классов (class) и идентификаторов (id) для моей темы Вордпресс. Если взгляните на код comments.php, то строчка вывода всего блока комментариев WordPress там обрамлена в контейнер ul с прописанным классом:

<ul class=&quot;comments-list&quot;><?php wp_list_comments($args); ?></ul>

После работы движка Вордпресс происходит интерпретация этой части PHP кода в HTML код и в браузере происходит отображение соответствующего элемента вебстраницы. Таким образом, между открывающим и закрывающим тегами ul с помощью функции wp_list_comments($args) будут отображаться все комментарии.

По аналогии, если вы посмотрите на файл functions.php, то обратите внимание на строчку:

<li <?php comment_class(); ?> id=&quot;li-comment-<?php comment_ID() ?>&quot;>

Это кусок кода PHP отвечает за вывод ветки комментариев WordPress, то есть если происходит какой-то диалог на определенную тему пользователя с администратором. Благодаря таким разветвлениям очень легко отслеживать общение между конкретными пользователями. И для каждой ветки также прописаны определенные классы.

Но в данном случае нас интересует оформление отдельного комментария. Для того, чтобы улучшить внешний вид каждого из комментариев, я добавил некоторые свойства для уже имеющегося класса «comment-body» в файл style.css темы и полностью правило CSS для него стало выглядеть так:

.comment-body {  border: 1px solid #bbb; /* Толщина, стиль и цвет линии границы */  border-radius: 8px; /* Радиус закругления границы */  padding: 10px; /* Поля вокруг текста */   }

После внесения этих изменений комментарии получили такое оформление:

«>

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

goldbusinessnet.com

Дополнение

Приведу один случай, когда мой код можно не использовать.

Если в файле comments.php идет такой вызов списка комментариев:

Здесь уже вызывается индивидуальный стиль для списка. Т.е. где-то у вас в шаблоне будет лежать файл wp_list_comments.php или подобное название, где вы сможете по моему коду выше подкорректировать get_comment_author() (имя комментатора без ссылки) и get_comment_author_url() (вызов непосредственно названия домена).

Здесь callback=custom_comments как раз и вызывает индивидуальный стиль, т.е. это для вас и будет ориентиром, что нужно поискать отдельный файл.

mojwp.ru

Approach #1 — Overriding start_el() with a custom walker

Let’s define our custom wpse comment format:

// Arguments for wp_list_comments()  $args = [  'style' => 'ol',  'format' => 'html5',  'short_ping' => true, ];  // Use our custom walker if it's available if( class_exists( 'WPSE_Walker_Comment' ) ) {  $args['format'] = 'wpse';  $args['walker'] = new WPSE_Walker_Comment; }  wp_list_comments( $args ); 

with a custom comment walker, that handles this new format (PHP 5.4+):

/**  * Custom comment walker  *  * @users Walker_Comment  */ class WPSE_Walker_Comment extends Walker_Comment {  public function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 )  {  // Our custom 'wpse' comment format  if ( 'wpse' === $args['format'] )  {  $depth++;  $GLOBALS['comment_depth'] = $depth;  $GLOBALS['comment'] = $comment;   // Start output buffering  ob_start();   // Let's use the native html5 comment template  $this->html5_comment( $comment, $depth, $args );   // Our modifications (wrap <time> with <span>)  $output .= str_replace(   [ '<time ', '</time>' ],   ['<span><time ', '</time></span>' ],   ob_get_clean()   );  }  else  {  // Fallback for the native comment formats  parent::start_el( $output, $comment, $depth, $args, $id );  }   } } // end class 

Note how we handle our custom comment format. We also reuse the start_el() method from the parent class for the native formats, by calling parent::start_el().

Also note that we use the output buffering in a similar way as the parent class.

Approach #2 — Overriding html5_comment() with a custom walker

We can also directly override the native Walker_Comment::html5_comment() method, in the following way:

// Arguments for wp_list_comments()  $args = [  'style' => 'ol',  'format' => 'html5',  'short_ping' => true, ];  // Use our custom walker if it's available if( class_exists( 'WPSE_Walker_Comment' ) ) {  $args['walker'] = new WPSE_Walker_Comment; }  wp_list_comments( $args ); 

where our custom walker class is defined as:

/**  * Custom comment walker  *  * @users Walker_Comment  */ class WPSE_Walker_Comment extends Walker_Comment {  public function html5_comment( $comment, $depth, $args )  {  // Place the modifications of the Walker_Comment::html5_comment() method here  } } // end class 

Here we can store our modifications to the Walker_Comment::html5_comment() method. It’s rather long, so I didn’t add it here.

Approach #3 — Custom callback

Here we would use the callback attribute:

// Arguments for wp_list_comments()  $args = [  'style' => 'ol',  'format' => 'html5',  'short_ping' => true, ];  // Use our custom callback if it's available if( function_exists( 'wpse_comment_callback' ) ) {  $args['format'] = 'wpse';  $args['callback'] = 'wpse_comment_callback'; }  wp_list_comments( $args ); 

where we define the wpse_comment_callback() to our needs.

/**  * Custom comment callback  */ function wpse_comment_callback( $comment, $depth, $args ) {  // Modify the Walker_Comment::html5_comment() method to our needs   // and place it here } 

where we could start by simulating the Walker_Comment::html5_comment() method. But we must remember to replace all reference to $this.

There are other approaches avilable, but hopefully you can adjust these to your needs.

wordpress.stackexchange.com

Шаг 1. Разбираемся в функцией comment_form и ее аргументами

Рассмотрим функцию WordPress comment_form. Она отвечает за вывод формы комментариев, которая выводится на странице или записи. Вызов данной функции в основном можно встретить в файле comments.php в папке темы. Данный файл включается в различных местах, например, в файлах  single.php и page.php, непосредственно или через вызов функции comments_template.

Описание функции можно найти в кодексе WordPress.

Если использовать функцию comment_form для вывода формы, то она будет выводиться с использованием параметров по умолчанию и будет содержать такие поля как имя, email (оба поля являются обязательными), веб сайт и содержание комментария. В теме по умолчанию Twenty Eleven форма будет выглядеть следующим образом.

Форма комментария в теме по умолчанию

Некоторые важные аргументы функции comment_form:

  • fields –с его помощью можно управлять выводом полей в форме комментария.
  • comment_notes_before и comment_notes_after – используются для вывода информации перед и после формы.
  • title_reply – используется для изменения названия ответа, которое по умолчанию имеет значение ‘Leave a Reply’.
  • label_submit – используется для изменения текста на кнопке отправки комментария.

 

Шаг 2. Настраиваем форму комментария с помощью функции comment_form

Теперь настроим нашу форму комментария с помощью передачи аргументов в функцию comment_form.

В случае, если нам нужно настроить поля в форме комментариев, нужно передать их список в функцию comment_form. По умолчанию для функции используется следующий список полей:

Если нам нужно удалить поле, например, website, нужно просто исключить его из массива и передать массив в функцию comment_form.

Теперь форма комментария будет выглядеть следующим образом:

Изменнный список полей

В дополнение также сменим название формы на ‘Please give us your valuable comment’, а надпись на кнопке на ‘Send My Comment’.

Для выполнения задачи передаем в функцию comment_form следующие аргументы:

Теперь форма комментария будет выглядеть следующим образом:

Форма комментария

 

Шаг 3. Удаляем поля из формы с помощью крюка

Также форма комментария WordPress может быть изменена с помощью крюков и фильтров. Такая настройка может быть особенно полезна при работе с плагином, когда нужно настроить несколько элементов, но не изменять файлы темы. Фильтр для добавления иди удаления полей из формы — ‘comment_form_default_fields

Удалим поле адреса URL с помощью фильтра. Приведенный код можно использовать в плагине или в файле functions.php активной темы.

В данном случае мы добавили функцию remove_comment_fields к фильтру ‘comment_form_default_fields‘, которая удаляет поле url.

 

Шаг 4. Добавляем данные в форму комментария с помощью крюка

Мы можем добавить поля в форму с помощью фильтра ‘comment_form_default_fields‘. Добавим поле возраста автора с помощью фильтра и сохраним данное поле дополнительные данные и будем их выводить в комментарии.

Добавляем поле следующим образом:

Как только мы добавили поле в тему, то ему нужно задать стиль. Для темы по умолчанию Twenty Eleven добавим селектор #respond .comment-form-age label к другим меткам, таким как  #respond .comment-form-url label и  так далее:

Теперь наша форма комментария будет выглядеть следующим образом:

Форма с дополнительным полем

Теперь возраст хранится как дополнительная информация. Нужно использовать крюк в ‘comment_post‘:

Как только данные сохранены, их можно выводить в комментарии следующим образом:

Дополнительная информация в комментарии

 

Шаг 5. Настройка комментариев для определенных типов записей

Иногда требуется использовать поля в комментариях только для определенных типов записей. Изменим код для вывода поля возраста только для записи типа book:

 

Шаг 6. Создаем возвратную функцию для вывода комментариев

Функция wp_list_comments используется для вывода комментариев в записях. В кодексе WordPress функция описана подробно.

wp_list_comments имеет аргумент ‘callback‘ в котором можно определить функцию, которая вызывается при выводе комментария.

В теме Twenty Eleven в файле comments.php можно найти строку:

Изменим ее на:

Функция my_comments_callback будет вызываться для каждой записи.

 

Шаг 7.  Стилизация комментариев

Теперь мы немного изменим стиль комментария. Просто будем выводить содержание записи и поле возраста, которое было добавлено нами ранее. Мы также изменим цвет фона для комментариев.

Код функции ‘my_comments_callback‘:

Изменяем цвет фона следующим образом:

Комментарии будут иметь следующий вид:

Вид комментариев

 

Заключение

Комментарии играют важную роль при построении сообщества пользователей сайта. В зависимости от функционала сайта комментарии также можно изменить. WordPress обеспечивает гибкую систему настройки и изменения функционала комментариев на вашем сайте.

ruseller.com

WordPress 2.7 introduced a simplified way of listing comments with a new function called wp_list_comments() for use in a theme’s comments.php. This automatically takes care of the display of the author, date, avatar, comment text etc, rather than the more complex way used for older versions of WordPress. This is all fine and dandy, but actually makes customising the output of the comments – ie what exactly is displayed – slightly more complex.

wp_list_comments()

I’m not going to repeat all that can be found on the Codex, see wp_list_comments() for details, but essentially the function has a fairly limited set of arguments, none of which relate to some of the elements mentioned above. For example, it isn’t possible to exclude the comment date, or avatar, by playing directly with the function’s arguments.

Custom callback

Luckily, the WP developers saw fit to include the the use of a callback function within wp_list_comments(). The callback function is called like this:

wp_list_comments('type=comment&callback=mytheme_comment');

What this means is that wp_list_comments() will return the output of the callback function rather than it’s default output. So, to create our own customised output, we simply need to define a suitable callback function, in this example a function called mytheme_comment, in our theme’s functions.php.

And this is exactly what I have done on www.studiograsshopper.ch, where I use a custom callback function to display Trackbacks and Pingbacks differently from normal comments. You can see an example here.

If you look at the Trackbacks on the post linked above you will see that the display is simplified: there is no Reply button, and I’ve changed the default “Says” text to “Wrote”. There are some CSS tweaks too, but let’s ignore those for the moment.

A “default” custom callback function

Here’s the example custom callback function shown in the Codex:

function mytheme_comment($comment, $args, $depth) {   $GLOBALS['comment'] = $comment; ?>   <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">   <div id="comment-<?php comment_ID(); ?>">   <div class="comment-author vcard">   <?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?>     <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>   </div>   <?php if ($comment->comment_approved == '0') : ?>   <em><?php _e('Your comment is awaiting moderation.') ?></em>   <br />   <?php endif; ?>     <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div>     <?php comment_text() ?>     <div class="reply">   <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>   </div>   </div>  <?php   }  

Basically, if we were to run this function and view its output, we would see exactly the same result as the normal comments on this site. In other words, this function will produce the same output as the following code in a typical theme’s comments.php file:

<?php wp_list_comments('type=comment'); ?>

Now we have a base to work from, it’s not too difficult to edit this function to give us the output we want. In my case, I wanted to display Trackbacks and Pingbacks differently from normal comments.

Customising Trackbacks and Pingbacks

Let’s look at how I customised the theme on my site to achieve this.

First, I opened up my theme’s comments.php and found the wp_list_comments() used to display trackbacks and pingbacks:

<?php wp_list_comments('type=pings'); ?>

Note that type=pings covers both trackbacks and pingbacks.

I then added the call to my custom callback function to the existing code:

<?php wp_list_comments('type=pings&callback=custom_pings'); ?>

Then, in functions.php, I added the Codex example callback function, renamed it to custom_pings, then edited this function to remove the elements I didn’t want, in my case:

1. Removed the line for the avatar:

<?php echo get_avatar($comment,$size='48',$default='<path_to_url>' ); ?>

2. Removed the code for the Reply button:

<div class="reply">   <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>  </div>  

Here’s the final version of the callback function as used in my functions.php:

/* Custom callback function for Trackbacks/Pings, see comments.php */  function custom_pings($comment, $args, $depth) {   $GLOBALS['comment'] = $comment; ?>   <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">   <div id="comment-<?php comment_ID(); ?>">   <div class="comment-author vcard">      <?php printf(__('<cite class="fn">%s</cite> <span class="says">wrote:</span>'), get_comment_author_link()) ?>   </div>   <?php if ($comment->comment_approved == '0') : ?>   <em><?php _e('Your comment is awaiting moderation.') ?></em>   <br />   <?php endif; ?>     <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?></div>     <?php comment_text() ?>      </div>  <?php  }  

www.studiograsshopper.ch

Как убрать лишние кавычки в комментариях?

Если в теме WordPress нет файла «comments.php», тогда перетащите готовый файл «comments.php» с папки  «theme-compat» и перекиньте в шаблон темы.
Путь к файлу «comments.php»:  /wpincludes/themecompat/ comments.php.
Путь к вашей теме шаблона:  /wpcontent/themes/папка с темой шаблона.

Как убрать лишние кавычки в комментариях?

Теперь в теме шаблона появился файл «comments.php», в котором можно делать исправление, редактирование формы и вывода комментариев.
Исправляем ошибку.
найдите в коде строку 27, вот такой код:

<h3 id="comments"><?php printf( _n( 'One Response to %2$s', '%1$s Responses to %2$s', get_comments_number() ),   number_format_i18n( get_comments_number() ), '&#8220;' . get_the_title() . '&#8221;' ); ?></h3>

Уберите с кода вот этих два символа:

  &#8220;  

Вуаля, кавычки исчезли.

Как создать комментарии в шаблоне WordPress?

Казалось бы — все, но нет, нашелся еще один косяк, это вывод в комментариях двоеточий – «:». После пару ударов головой об клавиатуру, я понял, что таким методом проблема не решится. Я принялся за поиск решений проблем.

Как создать комментарии в шаблоне WordPress?

Для решения этой проблемы откройте файл «functions.php» и допишите такой код:

    /*комментарий*/    function mytheme_comment($comment, $args, $depth) {   $GLOBALS['comment'] = $comment;   extract($args, EXTR_SKIP);    if ( 'div' == $args['style'] ) {   $tag = 'div';   $add_below = 'comment';   } else {   $tag = 'li';   $add_below = 'div-comment';   }  ?>   <<?php echo $tag ?> <?php comment_class(empty( $args['has_children'] ) ? '' : 'parent') ?> id="comment-<?php comment_ID() ?>">   <?php if ( 'div' != $args['style'] ) : ?>   <div id="div-comment-<?php comment_ID() ?>" class="comment-body">   <?php endif; ?>   <div class="comment-author vcard">   <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>   <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>   </div>  <?php if ($comment->comment_approved == '0') : ?>   <em class="comment-awaiting-moderation"><?php _e('Your comment is awaiting moderation.') ?></em>   <br />  <?php endif; ?>    <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>">   <?php   /* translators: 1: date, 2: time */   printf( __('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','' );   ?>   </div>    <?php comment_text() ?>    <div class="reply">   <?php comment_reply_link(array_merge( $args, array('add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>   </div>   <?php if ( 'div' != $args['style'] ) : ?>   </div>   <?php endif; ?>  <?php   }    

Удалите с кода:

<span class="says">says:</span>

Теперь  откройте файл «comments.php» и найдите этот код:

    <ol class="commentlist">   <?php wp_list_comments();?>   </ol>    

замените его на этот:

    <ol>  <?php wp_list_comments('type=comment&callback=mytheme_comment');?>  </ol>    

Вот и решена еще одна проблема.

Как увеличить размер аватара?

Раз уж мы установили этот код в файл «functions.php», тогда давайте еще выжмем с него одну возможность. Возможность указать параметры  увеличения и уменьшения размера аватара в комментариях.

Найдите в коде такие строчки:

  <div class="comment-author vcard">   <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>   <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>   </div>  

и в строчке

  <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>  

добавьте размер аватара ‘avatar_size=80’.

  <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size=80'] ); ?>  

Естественно, я взял размер «80» только для примера, вы можете с размером смело экспериментировать.
Надеюсь, я вас не запутал. Даже если и запутал, всегда есть комментарий в конце поста, где вы можете задать мне вопрос ;-).

Как увеличить размер аватара обычным способом?

Если вы не делали всех действий, что я расписал вверху, и вас все устраивает, тогда сделайте такие действия:
Откройте файл «comments.php».
Найдите в коде список комментариев, который выводится функцией

<?php wp_list_comments();?>

К этой функции укажите число размера аватара.

wp_list_comments('avatar_size=80');

Вот и все. Если что не понятно, то вы знаете, где поле ввода комментариев. Если не знаете, то оно находится у меня снизу, в конце сайта. Задавайте вопросы, постараюсь ответить.

Понравился пост? Помоги другим узнать об этой статье, кликни на кнопку социальных сетей ↓↓↓

bloggood.ru

Недавно у меня появилась нужда, создать страницу отзывов на одном из сайтов из обычной записи, а комментарии из под нее вывести где-нибудь в сайдбаре. У меня на сайте уже есть статья о том Как вывести последние комментарии с аватарами без плагинов WordPress. Но в данном случаи мне надо только из определенной статьи. Для этого нужно указать некоторые параметры для нашей функции wp_list_comments().

Готовый код функции будет выглядеть следующими образом:

  <ul class="commentlist">  <?php  $comments = get_comments(array(  			'post_id' => 17,  			'status' => 'approve'  		));  		wp_list_comments(array(  			'per_page' => 3,  			'reverse_top_level' => false   ), $comments);  ?>  </ul>  

Давайте разберем его по полочкам, чтобы понять что, куда и как?

  1. В первой строке видно, что комментарии заключаются в список с классом commentlist. Таким же классом выделены и комментарии под записью, поэтому забегу на перед и скажу. Этот список будет иметь точь в точь вид как и комментарии под записью, те же стили и элементы. Так что если хотите изменить, придется поработать и прописать новые стили в файле style.css.
  2. В четвертой строке указываем ID той записи, из которой будем брать наши комментарии. Чтобы узнать айди записи нужно зайти в список записей в админке и навести на нужную запись мышью. Внизу окна., слева появится текст-ссылка, внутри которого будет цифра которая и является ID.
  3. В пятой строке указываем, что брать нужно только одобренные комментарии.
  4. В строке номер 8, указываем количество выводимых комментариев.

    Тут есть момент. В этом списке, если в настройках включена древовидность, она сохраняется и если среди тех комментариев, что Вы оставили есть тот, на который ответили, то не смотря на ограничение по количеству, выведутся и ответы.

  5. В 9 строке, указываем метод сортировки списка комментариев. Сейчас установлено значение — false. Значит сортировка от новых до старых комментариев. Если установить true, наоборот.

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

Статья не с очень популярной темой, но все же, может кому пригодится.

На этом все, спасибо за внимание. ?

gnatkovsky.com.ua

With WordPress, displaying all the comments on a Post or Page is incredibly easy. In your theme’s single.php file you probably have a line like this:

<?php comments_template(); ?>

That line basically calls/includes your comments.php file. Within that, the line to output all comments is something really simple like this:

<ol class="commentlist">  <?php wp_list_comments(); ?> </ol>

But that doesn’t leave much by way of customizing the HTML that gets output, does it? Fortunately it’s fairly easy to specify your own formatting in a non-destructive non-core-altering way. Although personally, I’m having one little issue with it. Let’s take a look.

Why would you need this?

This is what you get as the defacto standard comment output:

But what if you wanted something more like this?

The best way to get into that new skin is to get your hands on the HTML, as CSS alone isn’t quite going to get us there.

Custom output through a callback function

The trick is is that the wp_list_comments function accepts a parameter for a callback function. This function overrides what the output of each comment will be. Here is an example of that:

<ol class="commentlist">  <?php wp_list_comments('type=comment&callback=format_comment'); ?> </ol>

The above code will only output «comments» (and not trackbacks or pingbacks) and will call a custom function «format_comment» for formatting the comment. This function needs to be built in your functions.php file, and better be present before you call this function otherwise you’ll throw an error.

The callback function is completely in charge of the comment formatting. It could be something completely whacky like this:

<?php  function format_comment() { ?>  <li>This is whack, yo.</li>  <?php }  ?>

Which would return that ridiculous sentence for every single comment, instead of the actual comment. Of course you wouldn’t (probably) ever do that. What you probably want to do, is just adjust how the different standard comment-related data is output. To do that, first you pull in the comment globals, then you can use all the comment functions that return the stuff that you probably want:

  • get_comment_link
  • get_comment_author
  • get_comment_date
  • get_comment_time
  • get_comment_text
  • etc.

Here is a customized formatting function I recently used:

<?php   function format_comment($comment, $args, $depth) {    $GLOBALS['comment'] = $comment; ?>    <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">    <div class="comment-intro">  <em>commented on</em>   <a class="comment-permalink" href="<?php echo htmlspecialchars ( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s'), get_comment_date(), get_comment_time()) ?></a>  <em>by</em>   <?php printf(__('%s'), get_comment_author_link()) ?>  </div>    <?php if ($comment->comment_approved == '0') : ?>  <em><php _e('Your comment is awaiting moderation.') ?></em><br />  <?php endif; ?>    <?php comment_text(); ?>    <div class="reply">  <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>  </div>   <?php } ?>

When NOT to customize output

Remember that CSS is quite the handyman at whipping things into shape. Let’s say your goal was to get rid of the gravatars that the default comment formatting outputs. Well that’s as simple as:

.avatar { display: none; }

And with more powerful tools like absolute positioning, you can take the default output and really do a ton of customization. There are some times though, when you need to alter the HTML to do it right, and that’s when all this is useful.

My little problem

My custom output works really well, save for one little problem. That is nested replies. The WORK, it’s just the output is invalid, as nested lists sit directly within the list above it instead of being wrapped in a list item like they should be. See:

Comparison of comment display and markup

I’m not quite sure how to fix that, although I imagine it can be done within the custom function somehow? If anyone knows, let me know.

Update

It was my mistake, although in my defense, the answer is a little weird. What you need to is OMIT the closing </li> tag in the callback function. WordPress will add that automatically for you.

In other news, if you find your callback function breaks the «Reply» button functionality, take a look at the add_below parameter:

<?php comment_reply_link(array_merge( $args, array('reply_text' => 'Reply', 'add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth']))); ?> 

That parameter takes a string, like «div-comment» for example, and then the reply links on each comment will be looking for the page element of «div-comment-XXXX» to jump the comment form up to (where XXXX is the ID of the comment). So your theme better have page elements with matching ID’s, or the reply link will «fail» and reload the page. I say «fail» in quotes because replying will still work, it just doesn’t do the cool jump-up technique which is the whole point of the comment-reply.js file that most themes load on single pages.

digwp.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.