Comments php


Здравствуйте!

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

Начну с того, что в каждом шаблоне (теме) WordPress есть файл comments.php, Полный путь к нему от корневого каталога: /wp-content/themes/папка_шаблона/comments.php

Именно comments.php отвечает в целом за блок комментариев в конкретной теме WordPress.

Что чаще всего содержится в comments.php:

– проверка защиты комментариев паролем

– проверка разрешены ли комментарии к статье

– проверка наличия комментариев и вывод соответствующего текста (“Комментариев нет …” или “Оставлено n комментариев”)

– вызов функции вывода комментариев – wp_list_comments()


– вывод навигации (пейджинации) при многостраничном размещении комментариев

– вывод формы для оставления комментариев к статье

Здесь понятно, что вы можете задавать свои классы или изменять свойства в style.css для уже существующих классов. Таким образом, вы можете изменить внешний вид формы для оставления комментариев и текстов до списка комментариев и после этого списка или формы. Но стили вывода непосредственно самих комментариев в comments.php изменить нельзя.

Когда я перечислял содержимое файла comments.php, то специально отметил подчеркиванием, что в comments.php происходит всего лишь вызов функции вывода комментариев wp_list_comments(), но не сам вывод. Т.е. в comments.php вы не найдете (по крайней мере, в последних версиях WordPress и при правильном подходе к разработке шаблонов): вывод имени автора сообщения и ссылки на его сайт, вывод аватарки автора, вывод даты и времени комментария, самого комментария и ссылки “ответить”.

Как же изменить стили в списке комментариев?

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

Вызов функции wp_list_comments() возможен без  колбэка (callback – функция обратного вызова) и с колбэком.

1. Вызов wp_list_comments без колбэка:

или, например, вот так (в качестве параметра передается размер аватарки)


Т.е. в параметрах функции (то что в скобочках, после названия) нигде не фигурирует параметр с названием ‘callback’.

Если в comment.php вашего шаблона такая ситуация, то это означает, что в данной теме нет собственной (пользовательской) функции для вывода комментариев и для этого используется стандартный шаблон (шаблон из ядра WordPress). Расположен он файле /wp-includes/comment-template.php. А поскольку вносить изменения в файлы из папки wp-includes нельзя, то в данном случае изменить стили отображения комментариев не получится, пока мы не прейдем ко второму варианту.

2. Вызов wp_list_comments с колбэком:

callback=custom_comment указывает, что для вывода комментариев у нас есть пользовательская функция custom_comment, код которой, грубо говоря, мы и передаем в качестве параметра для исполнения в стандартную функцию wp_list_comments. Но нас  интересует больше не техническая сторона этого вопроса, а именно наличие в шаблоне собственной функции для вывода комментариев. Код этой функции расположен в файле functions.php.

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

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


get_avatar() – получить аватар автора комментария;

get_comment_author_link() – получает html ссылку на сайт автора текущего комментария;

get_comment_date() – получает дату комментария;

get_comment_time() – получает время комментария;

comment_text() – выводит текст комментария;

comment_reply_link() – выводит ссылку “Ответить”;

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

Например, в коде пользовательской функции фрагмент вывода аватарки:

Теперь осталось в style.css задать желаемые свойства классу comment-author. Подробней конкретные примеры изменения стилей рассмотрю в одной из следующих статей.

Теперь у вас может возникнуть вопрос: “Что делать, если в моем шаблоне нет пользовательской функции для вывода комментариев?

Ответ: нужно создать её.

Самый простой вариант – скопировать код стандартной функции WordPress comment().

Инструкция по созданию пользовательской функции для вывода комментариев:

1. Откройте файл /wp-includes/comment-template.php и найдите в нем функцию  comment().


Вот начало её описания

2. Скопируйте все тело функции comment().

Скопировать нужно фрагмент кода от начала описания, показанного в пункте 1 до закрывающейся фигурной скобки } и следующего за ней подобного описания другой функции

3. Вставьте скопированный код в файл functions.php вашего шаблона.

4. Измените название функции, например на custom_comment и добавьте в начале функции строку $GLOBALS[‘comment’] = $comment;

5. В файле comments.php вашего шаблона найдите вызов функции wp_list_comments() и добавьте параметры type=comment и callback=custom_comment.

Должно получиться вот так:

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

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

Напишите, пожалуйста, является ли данная информация для вас новой и доступно ли она изложена в данной статье? Нужны ли какие-то дополнительные объяснения?

Спасибо за внимание!

Красивых вам комментариев!

wordpress-life.ru


Подключение комментариев к записи или странице происходит в файле single.php или page.php:

 <?php if ( comments_open() || get_comments_number() ) :  comments_template();  endif; ?> 

Подключается файл comments.php, в моем случае с таким содержимым:

 <?php /**  * The template for displaying Comments.  * The area of the page that contains comments and the comment form.  */  /*  * If the current post is protected by a password and the visitor has not yet  * entered the password we will return early without loading the comments.  */ if ( post_password_required() )  return; ?>  <?php  function mytheme_comment($comment, $args, $depth) {  $GLOBALS['comment'] = $comment; ?>  <div <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">  <div id="comment-<?php comment_ID(); ?>">   <div class="comment-author vcard">  <span class="author"><?php echo get_comment_author_link() ?></span>  <span class="comment-meta commentmetadata">  <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf( '%1$s в %2$s', get_comment_date(), get_comment_time()) ?></a>  <?php edit_comment_link('(Edit)', ' ', '') ?&g.  

]))) ?> </div> </div> <?php } ?> <?php // Reorder Comment text area after Fields add_filter('comment_form_fields', 'kama_reorder_comment_fields' ); function kama_reorder_comment_fields( $fields ){ $new_fields = array(); // new order of the field $myorder = array('author','email','comment'); // my order foreach( $myorder as $key ){ $new_fields[ $key ] = $fields[ $key ]; unset( $fields[ $key ] ); } // other fields to the end of form if( $fields ) foreach( $fields as $key => $val ) $new_fields[ $key ] = $val; return $new_fields; } ?> <div id="comments" class="comments-area"> <?php if ( have_comments() ) : ?> <h2 class="comments-title"><?php printf( _nx( 'One comment', '%1$s Comments', get_comments_number(), 'comments title', '' ), number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' ); ?></h2> <div class="comment-lis.

en-reader-text section-heading"><?php _e( 'Comment navigation', '' ); ?></h2> <div class="nav-previous alignleft"><?php previous_comments_link( __( '&larr; Older Comments', '' ) ); ?></div> <div class="nav-next alignright"><?php next_comments_link( __( 'Newer Comments &rarr;', '' ) ); ?></div> </nav><!-- .comment-navigation --> <?php endif; // Check for comment navigation ?> <?php if ( ! comments_open() && get_comments_number() ) : ?> <p class="no-comments"><?php _e( 'Comments are closed.' , '' ); ?></p> <?php endif; ?> <?php endif; // have_comments() ?> <?php // change fields in the comments form $commenter = wp_get_current_commenter(); $req = get_option( 'require_name_email' ); $aria_req = ( $req ? " aria-required='true'" : '' ); $comments_args = array( // reply link 'cancel_reply_link' => __( 'Cancel Repy' ), // change the title of send button 'label_submit'=>'Submit', // change the title of the reply section 'title_reply'=>'Join The Discussion', // remove "Text or HTML to be displayed after the set of comment fields" 'comment_notes_before' => '', 'comment_notes_after' => '', //fields 'fields' => array( 'author' => '<p class="comment-form-author"><label for="author">' .

( 'Name', '' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>', 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email', '' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) . '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>', 'url' => '', ), // redefine your own textarea (the comment body) 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', '' ) . '</label> <span class="required">*</span><br /><textarea id="comment" name="comment" aria-required="true"></textarea></p>', ); comment_form($comments_args); ?> </div><!-- #comments -->

Немного разберу части кода.


Выводим формат для каждого комментария (присутствует незакрытый div, так нужно по Кодексу):

 <?php  function mytheme_comment($comment, $args, $depth) {  $GLOBALS['comment'] = $comment; ?>  <div <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">  <div id="comment-<?php comment_ID(); ?>">   <div class="comment-author vcard">  <span class="author"><?php echo get_comment_author_link() ?></span>  <span class="comment-meta commentmetadata">  <a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf( '%1$s в %2$s', get_comment_date(), get_comment_time()) ?></a>  <?php edit_comment_link('(Edit)', ' ', '') ?>  </span>  <span class="comment-raiting"></span>  </div>   <?php if ($comment->comment_approved == '0') : ?>  <p class="awaiting">Your comment is awaiting moderation</p>  <?php endif; ?>   <div class="comment-text">  <?php comment_text() ?>  </div>   <div class="reply">  <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>  </div>   </div>  <?php }   ?> 

Меняем порядок размещения полей, текстовую область с комментарием располагаем под именем и почтой:


 <?php  // Reorder Comment text area after Fields add_filter('comment_form_fields', 'kama_reorder_comment_fields' ); function kama_reorder_comment_fields( $fields ){   $new_fields = array(); // new order of the field   $myorder = array('author','email','comment'); // my order   foreach( $myorder as $key ){  $new_fields[ $key ] = $fields[ $key ];  unset( $fields[ $key ] );  }  // other fields to the end of form  if( $fields )  foreach( $fields as $key => $val )  $new_fields[ $key ] = $val;   return $new_fields;  }   ?> 

Меняем тексты для полей и задаем формат для вывода комментариев и формы комментирования:

 <div id="comments" class="comments-area">   <?php if ( have_comments() ) : ?>  <h2 class="comments-title"><?php printf( _nx( 'One comment', '%1$s Comments', get_comments_number(), 'comments title', '' ), number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' ); ?></h2>   <div class="comment-list">  <?php  wp_list_comments( array(  'style' => 'div',  'type' => 'comment',  'short_ping' => true,  'avatar_size' => 32,  'callback' => 'mytheme_comment',  )   );  ?>  </div><!-- .comment-list -->    <?php  // Are there comments to navigate through?  if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) :  ?>  <nav class="navigation comment-navigation" role="navigation">  <h2 class="screen-reader-text section-heading"><?php _e( 'Comment navigation', '' ); ?></h2>  <div class="nav-previous alignleft"><?php previous_comments_link( __( '&larr; Older Comments', '' ) ); ?></div>  <div class="nav-next alignright"><?php next_comments_link( __( 'Newer Comments &rarr;', '' ) ); ?></div>  </nav><!-- .comment-navigation -->  <?php   endif; // Check for comment navigation   ?>   <?php if ( ! comments_open() && get_comments_number() ) : ?>  <p class="no-comments"><?php _e( 'Comments are closed.' , '' ); ?></p>  <?php endif; ?>   <?php endif; // have_comments() ?>    <?php  // change fields in the comments form  $commenter = wp_get_current_commenter();  $req = get_option( 'require_name_email' );  $aria_req = ( $req ? " aria-required='true'" : '' );   $comments_args = array(   // reply link  'cancel_reply_link' => __( 'Cancel Repy' ),   // change the title of send button  'label_submit'=>'Submit',   // change the title of the reply section  'title_reply'=>'Join The Discussion',   // remove "Text or HTML to be displayed after the set of comment fields"  'comment_notes_before' => '',  'comment_notes_after' => '',   //fields  'fields' => array(  'author' =>   '<p class="comment-form-author"><label for="author">' . __( 'Name', '' ) . '</label> ' .  ( $req ? '<span class="required">*</span>' : '' ) .  '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) .  '" size="30"' . $aria_req . ' /></p>',   'email' =>  '<p class="comment-form-email"><label for="email">' . __( 'Email', '' ) . '</label> ' .  ( $req ? '<span class="required">*</span>' : '' ) .  '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) .  '" size="30"' . $aria_req . ' /></p>',   'url' =>  '',  ),   // redefine your own textarea (the comment body)  'comment_field' =>   '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', '' ) . '</label> <span class="required">*</span><br /><textarea id="comment" name="comment" aria-required="true"></textarea></p>',  );   comment_form($comments_args);  ?>  </div><!-- #comments --> 

denis-creative.com

Комментарии в php коде и как закомментировать код. Основы PHP с нуля. Урок №4

Всем привет!
Продолжаем изучать основы PHP с нуля!
В этом уроке я расскажу, что такое комментарий в PHP и на практике попробуем прописать в коде свой комментарий. Но это еще не все. Еще хочу рассказать, как закомментировать код и для чего это вообще нужно делать.

Начнем!

Что такое комментарий в PHP
Комментарий в PHP – это подсказка php-разработчика для быстрого ориентирования в коде, а также для правок.

Комментарий в PHP невиден для пользователя, который открыл веб-страницу для просмотра. Даже если пользователь надумается посмотреть исходный код страницы, комментарий все равно виден не будет, так как и весь код php.

PHP комментарий коде

Существует 2 вида комментариев для кода PHP:

→ однострочный
→ многострочный

⇒ Однострочный комментарий для PHP
Для однострочного комментария следует применять символы «//» или «#»

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

Пример:

  <?php  // Однострочный комментарий для PHP  # Однострочный комментарий для PHP (можно и так)  echo "Привет читателям блога - StepkinBLOG.RU!!!"; // Мое приветствие (это комментарий)  echo "<br />Подпишись на обновление"; # подписка (это комментарий)  ?>  

На экране вы только увидите вот такой текст:

Привет читателям блога — StepkinBLOG.RU!!!
Подпишись на обновление

⇒ Многострочный комментарий для PHP
Многострочный комментарий для PHP начинается с символа «/*» и заканчивается символом «*/».
Все, что находится между этими символами, будет игнорироваться и считаться как комментарий.
Многострочный комментарий используется, если в записи несколько строк.

Пример:

  <?php  /*  Многострочный комментарий для PHP.  Многострочный комментарий используется,  если в записи несколько строк.  */  echo "Привет читателям блога - StepkinBLOG.RU!!!";  ?>  

На экране вы только увидите вот такой текст:

Привет читателям блога — StepkinBLOG.RU!!!

P.S.: Всегда комментируйте свой код. Если вы считаете, что вспомните все, что делали в коде через 1-2 года, вы ошибаетесь, шанс очень маленький. Даже если и вспомните, то придется потратить кучу времени на изучение – что, куда и зачем…
Сделайте приятное для себя будущего :smile: – закомментируй код и ты сам себе потом скажешь «СПАСИБО!!!».
Оставь комментарий в коде, это займет 1 минуту времени, но сэкономит тебе в будущем целый день.

stepkinblog.ru

Comments php

Вы скорее всего уже знаете о существовании комментариев в HTML. Тогда Вы сталкивались с подобной конструкцией

<!-- Комментарий в HTML коде.   Он не отображается при выводе страницы,   но виден в браузере при просмотре кода страницы -->

Комментарии в PHP нужны для того, чтобы зафиксировать зрительно или пометить какой-либо участок кода непосредственно в скрипте и виден он будет только там, в отличие от HTML, где в браузере они видны только при просмотре кода странциы.

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

1. Использование двух слэшей. Взят из семейства языков C. Скрывает только одну строку

2. Использование знака #. Происходит из скриптовых языков UNIX

3. Последний вид — много строчный комментарий. Взят из языков C ( /* комментарий */ )

Рассмотрим примеры работы. Код PHP

<?php     // комментарий в одну строку. Игнорируется интерпретатором и никуда не выводится   $a = 5;   // виден только в самом файле со скриптом              echo ($a + 8); # пример другого типа комментариев    /*  Ну и, конечно, пример много строчного комментария.  Когда нужно разродиться пояснением в несколько строк =)  */    ?>

<?php   echo "Пример кода";  ?>    // Этот комментарий отобразится в браузере, так как он не в php  <!-- Это комментарий в HTML. Он не будет выведен в браузер. --> 

Демонстрация Скачать исходники

Спасибо за внимание!

tradebenefit.ru

Мне нужно прокомментировать огромное количество информации только в нескольких файлах, и когда я смотрю вокруг Google и здесь, в SO, я продолжаю находить результаты, соответствующие coding standards, когда мне нужны стандарты комментариев. Мое кодирование соответствует большинству стандартов кодирования, за исключением случаев, когда дело доходит до комментариев.

Не могли бы вы предоставить примеры для следующего?

<?   // beginning of file comments   require( 'filename.php' ); // require or include, with filename   public class Test { } // class without constructor   public class Test // class with constructor, if different from above  {  public function __constructor() { } // constructor, no parameters   public function __constructor(var1, var2) { } constructor, with parameters   public function func1() { } // function, no parameters   public function func2($var1, $var2) { } // function, with parameters   public function func3( $optional = '' ) { } // function, optional parameters   private function func4() { } // private function, if different from above   public static staticfunc1() { } // public static function, if different from above   public function returnfunc1(var1, var2) // function, with return value  {  return var1 + var2; // return statement, dynamic  }   public function returnfunc2() // function, with unchanging return value, if different from above  {  return 1; // return statement, unchanging, if different from above  }   public function fullfunc1() // declaration, calling and assignment, in function  {  $var1; // variable declaration   $arr1 = array(); // array declaration, if different from above   $var2 = dirname( __FILE__ ) . '/file.ext'; // variable assignment   $this->var1 = $path . '_'; // class variable assignment   ob_start(); // function call   $this->func1(); // class function call   ob_end_clean();   foreach($arr as $key => $val) { } // foreach and for loops  }   public $var1; // public variable   private $var2; // private variable, if different from above  }   // ending of file comments?  ?> 

Знание правильного стиля важно. Это помогает другим людям понять, как работает ваш код, и как его использовать в будущем, если вы этого не объясняете.

qaru.site

 

В этой статье я расскажу о том, как создать свой собственный файл для комментариев (comments.php) для своей темы. Возможно, мой совет не идеален, но считаю, он стоит вашего внимания. Конечно, если у вас есть более яркий совет, жду ваших комментариев и готовых решений. Только не забудьте, чтобы вставить код в комментариях, добавьте ваш код между тегами:

Cкрипт плавной смены картинок на JQuery

Зачем нужно создавать в своей теме собственный файл для комментариев (comments.php), если сам WordPress выводит свою стандартную форму?

Действительно, WordPress выводит свою стандартную форму. Достаточно в файле «single.php» или «page.php» вызвать функцию готовой формы:

<?php comments_template(); ?>

Но вот теперь вопрос, если вы решите сделать какие-либо исправление в форме, например, захотите добавить какие-то css стили или смайлик, то как будете решать эту задачу?!
Вот по этой причине я рекомендую в своей теме создать свой файл для комментариев (comments.php) и делать там с формой все, что вздумается.

Итак, ближе к делу.
Перейдите по такому пути на вашем сайте: «wp-includes/theme-compat/» и откройте файл «comments.php». Скопируйте весь тот код .

Теперь перейдите в папку с вашей темой и создайте файл «comments.php». Вставьте в него скопированный код.
Закомментируйте или же удалите в коде строку №:71. Это функция, которая выводит стандартную форму для комментариев.

  <?php  /**  * @package WordPress  * @subpackage Theme_Compat  * @deprecated 3.0  *  * This file is here for Backwards compatibility with old themes and will be removed in a future version  *  */  _deprecated_file(  /* translators: %s: template name */  sprintf( __( 'Theme without %s' ), basename( __FILE__ ) ),  '3.0',  null,  /* translators: %s: template name */  sprintf( __( 'Please include a %s template in your theme.' ), basename( __FILE__ ) )  );    // Do not delete these lines  if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))  die ('Please do not load this page directly. Thanks!');    if ( post_password_required() ) { ?>  <p class="nocomments"><?php _e('This post is password protected. Enter the password to view comments.'); ?></p>  <?php  return;  }  ?>    <!-- You can start editing here. -->    <?php if ( have_comments() ) : ?>  <h3 id="comments">  <?php  if ( 1 == get_comments_number() ) {  /* translators: %s: post title */  printf( __( 'One response to %s' ), '&#8220;' . get_the_title() . '&#8221;' );  } else {  /* translators: 1: number of comments, 2: post title */  printf( _n( '%1$s 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>    <div class="navigation">  <div class="alignleft"><?php previous_comments_link() ?></div>  <div class="alignright"><?php next_comments_link() ?></div>  </div>    <ol class="commentlist">  <?php wp_list_comments();?>  </ol>    <div class="navigation">  <div class="alignleft"><?php previous_comments_link() ?></div>  <div class="alignright"><?php next_comments_link() ?></div>  </div>  <?php else : // this is displayed if there are no comments so far ?>    <?php if ( comments_open() ) : ?>  <!-- If comments are open, but there are no comments. -->    <?php else : // comments are closed ?>  <!-- If comments are closed. -->  <p class="nocomments"><?php _e('Comments are closed.'); ?></p>    <?php endif; ?>  <?php endif; ?>    <?php comment_form(); ?>  

Лично я ее закомментировал:

<?php //comment_form(); ?>

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

  <?php  $fields = array(  'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' ) . ($req ? '<span class="required">*</span>' : '') . '</label><br><input type="text" id="author" name="author" class="author" value="' . esc_attr($commenter['comment_author']) . '" placeholder="" pattern="[A-Za-zА-Яа-я]{3,}" maxlength="30" autocomplete="on" tabindex="1" required' . $aria_req . '></p>',  'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email') . ($req ? '<span class="required">*</span>' : '') . '</label><br><input type="email" id="email" name="email" class="email" value="' . esc_attr($commenter['comment_author_email']) . '" placeholder="admin@stepkinblog.ru" maxlength="30" autocomplete="on" tabindex="2" required' . $aria_req . '></p>',  'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label><br><input type="url" id="url" name="url" class="site" value="' . esc_attr($commenter['comment_author_url']) . '" placeholder="stepkinblog.ru" maxlength="30" tabindex="3" autocomplete="on"></p>'  );    $args = array(  'comment_notes_after' => '',  'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><br><textarea id="comment" name="comment" class="comment-form" cols="45" rows="8" aria-required="true" placeholder="Текст сообщения..."></textarea></p>',  'label_submit' => 'Отправить',  'fields' => apply_filters('comment_form_default_fields', $fields)  );  comment_form($args);  ?>  

Результат:

Как создать свой файл комментариев (comments.php) для своей темы.

Вот полностью готовый код файла «comments.php» для вашей темы:

  <?php  /**  * @package WordPress  * @subpackage Theme_Compat  * @deprecated 3.0  *  * This file is here for Backwards compatibility with old themes and will be removed in a future version  *  */  _deprecated_file(  /* translators: %s: template name */  sprintf( __( 'Theme without %s' ), basename( __FILE__ ) ),  '3.0',  null,  /* translators: %s: template name */  sprintf( __( 'Please include a %s template in your theme.' ), basename( __FILE__ ) )  );    // Do not delete these lines  if (!empty($_SERVER['SCRIPT_FILENAME']) && 'comments.php' == basename($_SERVER['SCRIPT_FILENAME']))  die ('Please do not load this page directly. Thanks!');    if ( post_password_required() ) { ?>  <p class="nocomments"><?php _e('This post is password protected. Enter the password to view comments.'); ?></p>  <?php  return;  }  ?>    <!-- You can start editing here. -->    <?php if ( have_comments() ) : ?>  <h3 id="comments">  <?php  if ( 1 == get_comments_number() ) {  /* translators: %s: post title */  printf( __( 'One response to %s' ), '&#8220;' . get_the_title() . '&#8221;' );  } else {  /* translators: 1: number of comments, 2: post title */  printf( _n( '%1$s 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>    <div class="navigation">  <div class="alignleft"><?php previous_comments_link() ?></div>  <div class="alignright"><?php next_comments_link() ?></div>  </div>    <ol class="commentlist">  <?php wp_list_comments();?>  </ol>    <div class="navigation">  <div class="alignleft"><?php previous_comments_link() ?></div>  <div class="alignright"><?php next_comments_link() ?></div>  </div>  <?php else : // this is displayed if there are no comments so far ?>    <?php if ( comments_open() ) : ?>  <!-- If comments are open, but there are no comments. -->    <?php else : // comments are closed ?>  <!-- If comments are closed. -->  <p class="nocomments"><?php _e('Comments are closed.'); ?></p>    <?php endif; ?>  <?php endif; ?>    <?php //comment_form(); ?>  <?php  $fields = array(  'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' ) . ($req ? '<span class="required">*</span>' : '') . '</label><br><input type="text" id="author" name="author" class="author" value="' . esc_attr($commenter['comment_author']) . '" placeholder="" pattern="[A-Za-zА-Яа-я]{3,}" maxlength="30" autocomplete="on" tabindex="1" required' . $aria_req . '></p>',  'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email') . ($req ? '<span class="required">*</span>' : '') . '</label><br><input type="email" id="email" name="email" class="email" value="' . esc_attr($commenter['comment_author_email']) . '" placeholder="admin@stepkinblog.ru" maxlength="30" autocomplete="on" tabindex="2" required' . $aria_req . '></p>',  'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label><br><input type="url" id="url" name="url" class="site" value="' . esc_attr($commenter['comment_author_url']) . '" placeholder="stepkinblog.ru" maxlength="30" tabindex="3" autocomplete="on"></p>'  );    $args = array(  'comment_notes_after' => '',  'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><br><textarea id="comment" name="comment" class="comment-form" cols="45" rows="8" aria-required="true" placeholder="Текст сообщения..."></textarea></p>',  'label_submit' => 'Отправить',  'fields' => apply_filters('comment_form_default_fields', $fields)  );  comment_form($args);  ?>  

Теперь вы сможете в форме делать свои изменения и не бояться, что после обновления вордпресс все ваши исправления в стандартной форме исчезнут.
Жду ваших идей в комментариях.

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

bloggood.ru

***

В WordPress для подключения шаблона комментариев на пост или страницу используется функция comments_template(), которая принимает в себя два параметра:

  • первый — путь к файлу шаблона, по умолчанию это comments.php в папке с текущей темой
  • второй служит для разделения комментариев по типу (обычные, трекбэки и пингбэки), по умолчанию false

Вставим comments_template() после вывода записи в шаблон поста single.php или страницы page.php.

  <?php while (have_posts()) : the_post(); ?>   <?php comments_template(); ?>  <?php endwhile; ?>  

Описание и принимаемые аргументы функции comments_template() и других упоминаемых в статье ищите в Кодексе WordPress.

Подготовка шаблона

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

  • В принципе назвать файл можно как угодно, а после в comments_template() прописать путь к этому файлу, однако лучше придерживаться стандартного названия
  • Редактировать файл можно и в админке WP, кстати
  • Лучше всего конечно писать код и сразу проверять его действие на своем блоге или на локальном сервере.

В WordPress возможно запретить комментарии для отдельных постов, поэтому перед их выводом нужно произвести проверку на «открытость»:

  <?php if (comments_open()) { ?>   <!-- здесь дальнейший код -->  <?php } else { ?>   <h3>Обсуждения закрыты для данной страницы</h3>  <?php } ?>  

Это код-обертка для наших дальнейших действий. Теперь подготовим контейнер для блока комментариев <div> с семантически корректным классом или идентификатором (класс конечно предпочтительнее):

  <div class="wrap-comments">   <!-- тут будет ваш код -->  </div>  

Внутри <div> пропишем заголовок, чтобы вашим читателям было понятно, что здесь находятся комментарии и ничто другое, тег <h3> будет для этого в самый раз:

  <h3>Комментарии читателей к статье "<?php the_title(); ?>"</h3>  

Здесь мы указали одну из функций WordPress — the_title(), результатом выполнения этой функции станет вывод заголовка текущего поста или страницы. Если вы не хотите выводить заголовок, то можно написать просто «Комментарии читателей».

Далее, перед тем как выводить комментарии, нужно удостовериться в их наличии, т.е. произвести проверку, если есть — вывести полный список, если нет — то можно показать пользователю что-то наподобие «Комментариев пока нет, но вы можете стать первым». Так посетителю вашего поста/страницы будет понятно, что никто еще ничего не писал, а мотивирующая фраза «Вы можете быть первым» увеличит вероятность того, что вам быстрее что-нибудь напишут.

Итак, после такой постановки задачи становится ясно, что для реализации нам понадобятся конструкции if/else и функция вывода количества комментариев get_comments_number(). Если функция возвращает 0 (ноль), то выводим «Комментариев пока нет…», иначе «Комментарии читателей…»:

  <?php    if (comments_open()) {   if (get_comments_number() == 0) { ?>   <h3>Комментариев пока нет, но вы можете стать первым</h3>   <?php } else { ?>   <div class="wrap-comments">   <h3>Комментарии читателей к статье "<?php the_title(); ?>"</h3>   <!-- далее кодим здесь -->   </div>   <?php }    } else { ?>   <h3>Обсуждения закрыты для данной страницы</h3>   <?php }   ?>  

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

Отлично, мы вывели заголовки в зависимости от наличия или отсутствия комментариев, теперь логично вывести сами комментарии — за это отвечает функция wp_list_comments(). Функция по умолчанию заключает все комментарии в теги <li>, поэтому следует добавить обертку <ol> с присвоением класса .commentlist:

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

wp_list_comments() принимает в себя массив аргументов, с помощью которых можно гибко настроить вывод комментариев. Например можно изменить размер аватара, текст ответа на комментарий и другие настройки, передав ключевое слово и значение:

  $args = array(   'avatar_size' => 64, // размер аватара 64*64px, по умолчанию 32   'reply_text' => 'Ответить' // текст ответа на комментарий   'callback' => 'my_comments' // функция формирования внешнего вида комментария  )  

Отдельного рассмотрения заслуживает параметр callback, который принимает значение имени пользовательской функции вывода комментария. С ее помощью можно гибко настроить внешний вид каждого комментария. Вот так выглядит стандартная функция вывода из файла comment-template.php:

  <?php   // стандартный вывод комментариев   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 }  ?>  

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

После вывода списка комментариев можно изменять их внешний вид через стили CSS. Некоторые параметры wp_list_comments() дублируются в админке WP, вкладка Параметры → Обсуждение, в частности наличие древовидных комментариев, сортировка по дате и т.п.

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

Для добавления формы комментариев используется функция comment_form(). Добавим ее под список комментариев:

  <?php    if (comments_open()) {   if (get_comments_number() == 0) { ?>   <h3>Комментариев пока нет, но вы можете стать первым</h3>   <?php } else { ?>   <div class="wrap-comments">   <h3>Комментарии читателей к статье "<?php the_title(); ?>"</h3>   <ol class="commentlist">   <li>   	<?php   function my_comments() {   /* здесь код пользовательской функции */   }    	 $args = array(   	 'avatar_size' => 64,   	 'reply_text' => 'Ответить',   'callback' => 'my_comments'   	 );   	 wp_list_comments($args);   	?>   </li>   </ol>   <?php comment_form(); ?>   </div>   <?php }   } else { ?>   <h3>Обсуждения закрыты для данной страницы</h3>   <?php }   ?>  

При таком вызове comment_form() загрузит стандартный код из файла WordPress comment-template.php. Функция принимает в себя два параметра:

  comment_form($args, $post_id);  
  • $args — массив настроек вывода формы
  • $post_id — id поста, к которому будет применена функция, по умолчанию текущий пост

Давайте к примеру сделаем валидацию на HTML5 полям формы, добавим текстовые подсказки. Создадим массив $args для ввода нужных настроек:

  $args = array();  comment_form($args);  

В массив необходимо прописать ключи настроек:

  $args = array(   'fields' => apply_filters('comment_form_default_fields', $fields)  );  

Теперь нам необходимо заполнить переменную-массив $fields, которая включает в себя поля формы. Проще всего взять стандартный код WordPress из comment-template.php и немного его изменить:

  <?php   // код из comment-template.php, для тех кто немного знаком с PHP, без труда его разберет   $fields = array(   'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' ) . '</label> ' . ($req ? '<span class="required">*</span>' : '') . '<input id="author" name="author" type="text" value="' . esc_attr($commenter['comment_author']) . '" size="30"' . $aria_req . '/></p>',   'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . '</label> ' . ($req ? '<span class="required">*</span>' : '') . '<input id="email" name="email" type="text" value="' . esc_attr($commenter['comment_author_email']) . '" size="30"' . $aria_req . '/></p>',   'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label>' . '<input id="url" name="url" type="text" value="' . esc_attr($commenter['comment_author_url']) . '" size="30"/></p>'   );   $args = array(   'fields' => apply_filters('comment_form_default_fields', $fields)   );   comment_form($args);  ?>  

Здесь значения параметров author, email и url — html-код полей «Имя», «Почта» и «Сайт соответственно. Эти значения необходимо отредактировать.

Для полей нам нужно добавить следующие атрибуты:

  • required — делает поля обязательным для заполнения, добавляем его для полей «Имя» и «Сайт»
  • placeholder — добавляет текстовую подсказку в поле
  • pattern="[A-Za-zА-Яа-я]{3,}" для поля «Имя» — указываем имя буквами латинского или русского алфавита и длину не менее 3 символов
  • type="email" для поля «Почта» — тем самым мы добавим валидацию HTML5 электронной почты
  • autocomplete — включает автозаполнение для полей
  • type="url" для поля «Сайт»

Не забудьте, что в старых браузерах новые атрибуты HTML5 работать не будут. Те браузеры, которые не понимают новые типы полей, будут просто выводить их как текстовые, т.е. <input type="text">.

Вдобавок я для своего блога кое-где поменял местами теги, добавил классы для стилизации, в результате у меня получился такой код массива $fields:

  <?php    $fields = array(   'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' ) . ($req ? '<span class="required">*</span>' : '') . '</label><input type="text" id="author" name="author" class="author" value="' . esc_attr($commenter['comment_author']) . '" placeholder="Иван" pattern="[A-Za-zА-Яа-я]{3,}" maxlength="30" autocomplete="on" tabindex="1" required' . $aria_req . '></p>',   'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email') . ($req ? '<span class="required">*</span>' : '') . '</label><input type="email" id="email" name="email" class="email" value="' . esc_attr($commenter['comment_author_email']) . '" placeholder="example@example.com" maxlength="30" autocomplete="on" tabindex="2" required' . $aria_req . '></p>',   'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label><input type="url" id="url" name="url" class="site" value="' . esc_attr($commenter['comment_author_url']) . '" placeholder="www.example.com" maxlength="30" tabindex="3" autocomplete="on"></p>'   );  ?>  

Мы изменили поля ввода данных. Теперь подредактируем саму форму комментариев <textarea>. Код формы изменяем с помощью параметра comment_field массива $args:

  <?php   'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" class="comment-form" cols="45" rows="8" aria-required="true" placeholder="Текст сообщения..."></textarea></p>'  ?>  

Это стандартный код WordPress, я лишь немного видоизменил его — добавил текстовую подсказку и прописал дополнительный класс для стилизации.

Вот что я в итоге получил с применением стилей CSS:

Форма комментариев WordPress
Форма комментариев WordPress с использованием атрибутов HTML5

Итог

Напоследок скину свой получившийся код comments.php:

  <?php if (comments_open()) { ?>   <h3 class="comments-caption"><a name="comments"><?php comments_number('Комментарии', '1 комментарий', '% комментариев'); ?> читателей статьи "<?php the_title();?>"</a></h3>   <?php if (get_comments_number() == 0) { ?>   <ul class="list">   <li>Оставьте первый комментарий - автор старался</li>   </ul>   <?php } else { ?>   <ol class="commentlist">   <?php   function verstaka_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">   <div class="comment-meta commentmetadata" style="float: right;">   <span><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></span>   </div>   <?php echo get_avatar($comment,$size='74',$default='<path_to_url>' ); ?>   <?php printf(__('@<cite class="fn">%s</cite> <span class="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; ?>   <?php comment_text() ?>   <div class="reply">   <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>   </div>   </div>   <?php }   $args = array(   'reply_text' => 'Ответить',   'callback' => 'verstaka_comment'   );   wp_list_comments($args);   ?>   </ol>   <?php } ?>     <?php   $fields = array(   'author' => '<p class="comment-form-author"><label for="author">' . __( 'Name' ) . ($req ? '<span class="required">*</span>' : '') . '</label><input type="text" id="author" name="author" class="author" value="' . esc_attr($commenter['comment_author']) . '" placeholder="" pattern="[A-Za-zА-Яа-я]{3,}" maxlength="30" autocomplete="on" tabindex="1" required' . $aria_req . '></p>',   'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email') . ($req ? '<span class="required">*</span>' : '') . '</label><input type="email" id="email" name="email" class="email" value="' . esc_attr($commenter['comment_author_email']) . '" placeholder="example@example.com" maxlength="30" autocomplete="on" tabindex="2" required' . $aria_req . '></p>',   'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label><input type="url" id="url" name="url" class="site" value="' . esc_attr($commenter['comment_author_url']) . '" placeholder="www.example.com" maxlength="30" tabindex="3" autocomplete="on"></p>'   );     $args = array(   'comment_notes_after' => '',   'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" class="comment-form" cols="45" rows="8" aria-required="true" placeholder="Текст сообщения..."></textarea></p>',   'label_submit' => 'Отправить',   'fields' => apply_filters('comment_form_default_fields', $fields)   );   comment_form($args);   ?>   <?php } else { ?>   <h3>Обсуждения закрыты для данной страницы</h3>   <?php }  ?>  

FAQ по комментариям

Как выделить комментарии автора и пользователя?

Иногда бывает очень удобно задать отдельный внешний вид для авторских комментариев, для этого есть даже специальные плагины. Однако можно обойтись без всяких плагинов — просто прописав стили для класса .bypostauthor в css-файле. Аналогично можно задать стили для пользовательских комментариев — .bypostuser:

  .commentlist .bypostauthor {   /* авторские стили */  }  .commentlist .bypostuser {   /* пользовательские стили */  }  

Как задать стили для древовидных комментариев?

Для включения древовидных комментариев нужно зайти в админку WP, Параметры → Обсуждение → Разрешить древовидные комментарии. Теперь дочерние комментарии будут иметь древовидную структуру, им можно задать отдельные стили, например сделать отступы. Все что нужно — установить правила в css для списка с классом .children:

  .commentlist .children {   padding: 0 0 0 40px; /* отступ слева для дочерних комментариев */  }  

Стили для четных и нечетных комментариев

WordPress по умолчанию дает нечетным комментариям класс .even, четным .odd. Через эти классы легко задавать свои стили:

  .commentlist .even {   /* стили для нечетных комментариев */  }  .commentlist .odd {   /* стили для четных комментариев */  }  

Как закрыть комментарии на отдельном посте?

Очень легко — заходим на страницу написания поста, Настройки экрана → Обсуждения, под полем поста появляется блок Обсуждения, снять выделение пункта Разрешить комментарии.

Еще советы

  • При составлении собственного шаблона комментариев можно пользоваться файлами comments.php из стандартных и других платных и бесплатных тем WordPress
  • Альтернатива стандартным комментариям — сторонние плагины форм комментирования, например популярная DISQUS
  • Вполне возможно править код прямо в самом файле comment-template.php, однако в случае обновления WordPress весь код будет перезаписан — придется править снова
  • Помните — идеального шаблона комментариев не бывает

Помощь проекту

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

Рейтинг статьи

verstaka.net


You May Also Like

About the Author: admind

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

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

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