n-wp.ru — блог о WordPress

Настройка формы комментирования, созданной функцией comment_form

Несколько примеров использования аргументов функции comment_form, с помощью которой можно вывести форму комментирования в WordPress 3+.

В WordPress 3+ появилась функция comment_form, которая автоматически формирует форму комментирования — три поля ввода данных комментатора и поле для ввода текста комментария. Разработчики тем активно взяли ее на вооружение. По-моему мнению, пользоваться этой функцией не очень удобно, особенно если нужно создать индивидуальную форму со своим дизайном. Самой частой проблемой, возникающей перед начинающим вебмастером, является редактирование полей ввода информации о комментаторе. Функция не содержит возможностей прямого редактирования этих полей без вмешательства в системные файлы, предлагая взамен этого использовать специальные аргументы.

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

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

’ ) . ‘


,’id_form’ => ‘commentform’
,’id_submit’ => ‘submit’
,’title_reply’ => __( ‘Leave a Reply’ )
,’title_reply_to’ => __( ‘Leave a Reply to %s’ )
,’cancel_reply_link’ => __( ‘Cancel reply’ )
,’label_submit’ => __( ‘Post Comment’ )
);

Аргументами являются все поля формы комментирования. Чтобы использовать эти поля со своими значениями, нужно вставить в шаблон вызов функции с этими аргументами. Например, использовать в файле comments.php:

’ ) . ‘


,’id_form’ => ‘commentform’
,’id_submit’ => ‘submit’
,’title_reply’ => __( ‘Leave a Reply’ )
,’title_reply_to’ => __( ‘Leave a Reply to %s’ )
,’cancel_reply_link’ => __( ‘Cancel reply’ )
,’label_submit’ => __( ‘Post Comment’ )
);
comment_form( $args );
?>

Если у вас тема, в которой используется функция comment_form, и в которой можно использовать файлы перевода на другой язык, то можете изменить в файле перевода соответствующие поля, например, найти «‘Leave a Reply» и перевести его как «Оставьте ответ» — это можно сделать программой POedit. Если же вы хотите сделать прямой перевод темы, в том числе и формы комментирования, то просто отредактируйте аргументы функции, переведя английские заголовки на русские.

Можно настроить агрументы и с помощью специальных фильтров. Например, скрыть из формы комментирования, созданной функцией comment_form, поле ввода сайта, добавив в functions.php:

С помощью фильтров можно добавить в форму комментирования дополнительные поля, изначально в ней не присутствующие, добавив в functions.php:

В этом случае аргументы функции будет выглядеть так:

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

Ну а как будут выглядеть поля формы комментирования, созданные с помощью функции comment_form, зависит от настроек CSS, указанных в файле style.css — все агрументы помечены разметкой HTML, для них можно задать любой внешний вид.

9 комментариев

  • Большое спасибо за старания и статью, но я вебмастер а не программист, и если честно я окончательно запутался…

    • Откройте comments.php, и вместо [cc lang=»php» inline=»yes»]< ?php comment_form( ); ?> вставьте:

      ’ ) . ‘‘
      ,’id_form’ => ‘commentform’
      ,’id_submit’ => ‘submit’
      ,’title_reply’ => __( ‘Leave a Reply’ )
      ,’title_reply_to’ => __( ‘Leave a Reply to %s’ )
      ,’cancel_reply_link’ => __( ‘Cancel reply’ )
      ,’label_submit’ => __( ‘Post Comment’ )
      );
      comment_form( $args );
      ?>

  • сделал так как вы написали, теперь отображается только форма ввода комментариев, поля для ввода имя и почты исчезли

  • Подскажите пожалуйста! как мне поле ввода комментария сделать выше полей ввода имени и мейла

    • add_filter(‘comment_form_fields’, ‘kama_reorder_comment_fields’ );
      function kama_reorder_comment_fields( $fields ){
      // die(print_r( $fields )); // посмотрим какие поля есть

      $new_fields = array(); // сюда соберем поля в новом порядке

      $myorder = array(‘author’,’email’,’url’,’comment’); // нужный порядок

      foreach( $myorder as $key ){
      $new_fields[ $key ] = $fields[ $key ];
      unset( $fields[ $key ] );
      }

      // если остались еще какие-то поля добавим их в конец
      if( $fields )
      foreach( $fields as $key => $val )
      $new_fields[ $key ] = $val;

      return $new_fields;
      }

    • Легче всего вместо вызова функции comment_form(); использовать HTML-форму:

  • В теме форма комментариев выводится через comment_form. По умолчанию поле «сайт» не обязательно для заполнения. Не подскажете как сделать его обязательным точно так, как «имя» и «e-mail».