comment_form_default_fields хук-фильтр . WP 3.0.0

comment_form_default_fields хук-фильтр . WP 3.0.0
Click here to view original web page at wp-kama.ru

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

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

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

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

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().

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

Код хука-фильтра comment_form_default_fields

...
		'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>',
	);

	$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 */
...