Хук preprocess_comment
в WordPress позволяет изменить данные комментария до того, как они будут очищены и добавлены в базу данных. Этот фильтр полезен, когда нужно проверять содержимое, добавлять пользовательские данные или управлять параметрами комментариев перед их сохранением.
Фильтр preprocess_comment
срабатывает перед тем, как данные комментария обрабатываются и попадают в базу данных. Это значит, что с его помощью можно контролировать содержание, URL, автора и другие параметры комментария, а также изменять их по мере необходимости.
apply_filters( 'preprocess_comment', array $commentdata )
$commentdata
(array) — Данные добавляемого комментария.
Эти данные включают:
comment_post_ID
— ID поста, к которому добавлен комментарий.comment_author
— Имя автора комментария.comment_author_email
— Email автора.comment_author_url
— URL автора.comment_content
— Текст комментария.comment_type
— Тип комментария: пусто для обычных комментариев,pingback
илиtrackback
для отзывов.user_ID
— ID пользователя (если авторизован).
Использование
Фильтр подключается к preprocess_comment
, и с его помощью можно обрабатывать данные перед добавлением комментария в базу:
add_filter( 'preprocess_comment', 'my_custom_preprocess_comment' );
function my_custom_preprocess_comment( $commentdata ) {
// Модифицируем данные комментария
return $commentdata;
}
Пример #1: Удаление URL-адреса автора из комментария
В целях безопасности или для предотвращения спама можно убрать URL-адрес, который добавляется автором комментария.
add_filter( 'preprocess_comment', 'remove_comment_author_url' );
function remove_comment_author_url( $commentdata ) {
// Удаляем URL автора
unset( $commentdata['comment_author_url'] );
return $commentdata;
}
Здесь unset()
удаляет ключ comment_author_url
из данных комментария. Это может помочь предотвратить добавление нежелательных ссылок.
Пример #2: Преобразование текста комментария в нижний регистр
Если пользователь оставляет комментарий полностью в верхнем регистре, можно преобразовать его в обычный текст с заглавными буквами в начале слов. Это улучшает читабельность комментариев.
add_filter( 'preprocess_comment', 'convert_comment_text_to_proper_case' );
function convert_comment_text_to_proper_case( $commentdata ) {
// Проверяем, если комментарий в верхнем регистре
if ( strtoupper( $commentdata['comment_content'] ) === $commentdata['comment_content'] ) {
$commentdata['comment_content'] = ucwords( strtolower( $commentdata['comment_content'] ) );
}
return $commentdata;
}
В этом примере проверяется, находится ли текст комментария в верхнем регистре, и при необходимости форматируется с заглавной буквы в начале каждого слова.
Пример #3: Установка пользовательского типа комментария для определенных постов
Если на сайте есть кастомный тип записей, например, book
, можно задать особый тип комментария, чтобы отличать его от других.
add_filter( 'preprocess_comment', 'set_custom_comment_type_for_books' );
function set_custom_comment_type_for_books( $commentdata ) {
$post = get_post( $commentdata['comment_post_ID'] );
// Устанавливаем тип комментария для записей типа "book"
if ( $post->post_type == 'book' ) {
$commentdata['comment_type'] = 'review';
}
return $commentdata;
}
Этот код проверяет, относится ли комментарий к записи типа book
, и если да, то устанавливает тип комментария как review
.
Пример #4: Ограничение длины комментария
Для защиты от спама и снижения нагрузки на сервер можно ограничить максимальную длину комментария.
add_filter( 'preprocess_comment', 'limit_comment_length' );
function limit_comment_length( $commentdata ) {
$max_length = 500; // Максимальная длина комментария
if ( strlen( $commentdata['comment_content'] ) > $max_length ) {
wp_die( 'Ваш комментарий слишком длинный. Пожалуйста, сократите его до 500 символов.' );
}
return $commentdata;
}
Здесь, если длина комментария превышает допустимую, пользователь получит сообщение об ошибке и не сможет отправить комментарий, пока он не сократит текст.
Заключение
Хук preprocess_comment
предоставляет разработчикам гибкие возможности для изменения и фильтрации данных комментариев. С его помощью можно удалять URL, ограничивать длину, форматировать текст, устанавливать собственные типы комментариев и проводить другие полезные проверки перед сохранением данных в базе.