comment_form_default_fields
Позволяет изменять, добавлять или удалять поля формы комментирования, например: имя, email, сайт.
Такие поля выводятся только для неавторизированных пользователей.
Читайте пошаговую статью «Как создать новые поля для комментариев WordPress», чтобы увидеть, как этот фильтр работает в комплексе с остальными хуками и функциями WordPress.
Использование
add_filter( 'comment_form_default_fields', 'wp_kama_comment_form_default_fields_filter' );
/**
* Function for `comment_form_default_fields` filter-hook.
*
* @param string[] $fields Array of the default comment fields.
*
* @return string[]
*/
function wp_kama_comment_form_default_fields_filter( $fields ){
// filter...
return $fields;
}
- $fields(массив)
- Массив с полями формы комментирования по умолчанию.
По умолчанию переменная $fields генерируется следующим образом (код из движка):
$fields = array( 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" maxlength="245"' . $html_req . ' /></p>', 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" maxlength="100" aria-describedby="email-notes"' . $html_req . ' /></p>', 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' . '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" maxlength="200" /></p>', );
В колбэк-функцию приходят уже обработанные строки и массив выглядит так (RU локаль):
Array ( [author] => <p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" required='required' /></p> [email] => <p class="comment-form-email"><label for="email">E-mail <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" required='required' /></p> [url] => <p class="comment-form-url"><label for="url">Сайт</label> <input id="url" name="url" type="url" value="" size="30" maxlength="200" /></p> )
Примеры
#1 Как убрать поле "Сайт" из формы комментирования
add_filter( 'comment_form_default_fields', 'comment_form_default_add_my_fields' );
/**
* Удаляет поле "Сайт" из формы комментирования для незарегистрированных пользователей.
*
* @param array $fields Дефолтные поля
*
* @return array
*/
function comment_form_default_add_my_fields( $fields ) {
unset( $fields['url'] );
return $fields;
} #2 Как добавить своё поле "Телефон" в форму комментирования
На фильтре comment_form_default_fields можно вывести своё поле.
Чтобы сохранить введенные в него данные нужно дополнительно задействовать событие comment_post.
add_filter( 'comment_form_default_fields', 'comment_form_default_add_phone_field' );
/**
* Добавляет поле "Телефон" в форму комментирования для незарегистрированных пользователей.
*
* @param array $fields Дефолтные поля
*
* @return array
*/
function comment_form_default_add_phone_field( $fields ) {
$fields['phone'] = '<p class="comment-form-phone">' .
'<label for="phone">' . __( 'Phone' ) . '</label>' .
'<input id="phone" name="phone" type="text" size="30"/></p>';
return $fields;
}
add_action( 'comment_post', 'save_extend_comment_meta_data' );
/**
* Сохраняет содержимое поля "Телефон" в метаполе.
*
* @param int $comment_id Идентификатор комментария
*/
function save_extend_comment_meta_data( $comment_id ) {
if ( ! empty( $_POST['phone'] ) ) {
$phone = sanitize_text_field( $_POST['phone'] );
add_comment_meta( $comment_id, 'phone', $phone );
}
}
Теперь, чтобы вывести значение поля в шаблоне комментария, нужно использовать функцию get_comment_meta().
Список изменений
| С версии 3.0.0 | Введена. |
Где вызывается хук
$fields = apply_filters( 'comment_form_default_fields', $fields );