В WordPress 3+ появилась функция comment_form, которая автоматически формирует форму комментирования – три поля ввода данных комментатора и поле для ввода текста комментария. Разработчики тем активно взяли ее на вооружение. По-моему мнению, пользоваться этой функцией не очень удобно, особенно если нужно создать индивидуальную форму со своим дизайном. Самой частой проблемой, возникающей перед начинающим вебмастером, является редактирование полей ввода информации о комментаторе. Функция не содержит возможностей прямого редактирования этих полей без вмешательства в системные файлы, предлагая взамен этого использовать специальные аргументы.
Вместо того, чтобы создавать свою форму комментирования, разработчики WordPress предлагают просто вставить в шаблон функцию, имеющую вид
</pre> <p>Как видите, у функции есть аргументы. их можно перечислять в виде массива. По умолчанию аргументы таковы:</p> <pre> $args = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ) ,'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8"></textarea></p>' ,'must_log_in' => '<p class="must-log-in">' . sprintf( __( 'You must be logged in to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>' ,'logged_in_as' => '<p class="logged-in-as">' . sprintf( __( 'Logged in as %2$s. Log out?' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>' ,'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>' ,'comment_notes_after' => '<p class="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '
' ) . '
'
,'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:
apply_filters( 'comment_form_default_fields', $fields ) ,'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><textarea id="comment" name="comment" cols="45" rows="8"></textarea></p>' ,'must_log_in' => '<p class="must-log-in">' . sprintf( __( 'You must be logged in to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>' ,'logged_in_as' => '<p class="logged-in-as">' . sprintf( __( 'Logged in as %2$s. Log out?' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '</p>' ,'comment_notes_before' => '<p class="comment-notes">' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '</p>' ,'comment_notes_after' => '<p class="form-allowed-tags">' . sprintf( __( 'You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: %s' ), ' <code>' . allowed_tags() . '
' ) . '
'
,'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:
add_filter('comment_form_default_fields', 'remove_url_from_commentform'); function remove_url_from_commentform($arg) { $arg['url'] = ''; return $arg; }
С помощью фильтров можно добавить в форму комментирования дополнительные поля, изначально в ней не присутствующие, добавив в functions.php:
function additional_fields($fields) { $fields['new'] = '<p>тут будет новое поле</p>'; return $fields; } add_filter('comment_form_default_fields',additional_fields');
В этом случае аргументы функции будет выглядеть так:
$defaults = array( 'fields' => apply_filters( 'comment_form_default_fields', $fields ), 'comment_field' => '<p class="comment-form-comment">...', 'must_log_in' => '<p class="must-log-in">...', 'logged_in_as' => '<p class="logged-in-as">...', 'comment_notes_before' => '<p class="comment-notes">...', 'comment_notes_after' => '<dl class="form-allowed-tags">...', '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' ), );
Можно обойтись и без определения агрументов и создания фильтров (хотя с ними удобнее), напрямую указав в качестве параметров поля формы комментирования:
'<p class="comment-form-comment"><label for="comment">Комментарий</label><textarea id="comment" name="comment" cols="45" rows="8"></textarea>' )); ?>
Ну а как будут выглядеть поля формы комментирования, созданные с помощью функции comment_form, зависит от настроек CSS, указанных в файле style.css - все агрументы помечены разметкой HTML, для них можно задать любой внешний вид.
Большое спасибо за старания и статью, но я вебмастер а не программист, и если честно я окончательно запутался…
Откройте 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 );
?>
сделал так как вы написали, теперь отображается только форма ввода комментариев, поля для ввода имя и почты исчезли
Подскажите пожалуйста! как мне поле ввода комментария сделать выше полей ввода имени и мейла
Какую тему вы используете?
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?
Легче всего вместо вызова функции comment_form(); использовать HTML-форму:
В теме форма комментариев выводится через comment_form. По умолчанию поле “сайт” не обязательно для заполнения. Не подскажете как сделать его обязательным точно так, как “имя” и “e-mail”.