Comment_form_default_fields — Позволяет изменять, добавлять или удалять поля формы комментирования, например: имя, email, сайт. Хук-фильтр WordPress

Опубликовано: 01.09.2018

Позволяет изменять, добавлять или удалять поля формы комментирования, например: имя, email, сайт.

Такие поля выводятся только для неавторизированных пользователей.

Использование

add_filter( 'comment_form_default_fields', 'filter_function_name_3090' ); function filter_function_name_3090( $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() .

Где используется хук

... '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>', 'cookies' => '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $consent . ' />' . '<label for="wp-comment-cookies-consent">' . __( 'Save my name, email, and website in this browser for the next time I comment.' ) . '</label></p>', ); $required_text = sprintf( ' ' . __('Required fields are marked %s'), '<span class="required">*</span>' ); /** * Filters the default comment form fields. * * @since 3.0.0 * * @param array $fields The default comment fields. */ $fields = apply_filters( 'comment_form_default_fields', $fields ); $defaults = array( '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" maxlength="65525" required="required"></textarea></p>', /** This filter is documented in wp-includes/link-template.php */ 'must_log_in' => '<p class="must-log-in">' . sprintf( /* translators: %s: login URL */ __( 'You must be <a href="%s">logged in</a> to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ), $post_id ) ) ) . '</p>', /** This filter is documented in wp-includes/link-template.php */ 'logged_in_as' => '<p class="logged-in-as">' . sprintf( /* translators: 1: edit user link, 2: accessibility text, 3: user name, 4: logout URL */ __( '<a href="%1$s" aria-label="%2$s">Logged in as %3$s</a>. <a href="%4$s">Log out?</a>' ), get_edit_user_link(), /* translators: %s: user name */ ... campusboy 2826 — youtube.com/c/wpplus

Создатель YouTube канала wp-plus, на котором делюсь своими опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.

rss