Функция wp_allow_comment()
проверяет, может ли комментарий быть опубликован, отправлен на модерацию или помечен как спам на основе переданных данных комментария. Она выполняет множество проверок, включая наличие дубликатов, возможность флуда комментариями и черные списки IP-адресов и доменов.
Если найден дубликат комментария, и параметр $wp_error
установлен в false
(по умолчанию), скрипт завершит работу через wp_die()
.
wp_allow_comment( array $commentdata, bool $wp_error = false ): int|string|WP_Error
Параметры
- $commentdata (array, обязательный) — Массив данных комментария, который включает такие поля, как
comment_author
,comment_content
,comment_author_email
и другие. - $wp_error (bool, необязательный) — Указывает, возвращать ли объект
WP_Error
в случае ошибки, вместо вызова функцииwp_die()
. По умолчанию:false
.
Возвращаемые значения
- int|string|WP_Error:
1
— Комментарий подтверждён и будет опубликован, если у автора есть правоmoderate_comments
или он автор комментируемого поста.0
— Комментарий не разрешён.'spam'
— Комментарий помечен как спам.- WP_Error — Если установлен параметр
$wp_error
вtrue
, вернется объект ошибки с описанием причины отклонения комментария.
Пример использования
Ниже приведен пример, демонстрирующий проверку комментария с помощью функции wp_allow_comment()
. Если комментарий проходит проверку, он добавляется в базу данных.
function handle_new_comment( $comment_author, $comment_content, $comment_author_email ) {
// Данные комментария
$commentdata = array(
'comment_post_ID' => get_the_ID(), // ID поста, к которому относится комментарий
'comment_author' => $comment_author, // Имя автора комментария
'comment_content' => $comment_content, // Текст комментария
'comment_author_email' => $comment_author_email, // Email автора
'comment_author_IP' => $_SERVER['REMOTE_ADDR'],// IP-адрес автора
'comment_date' => current_time('mysql'), // Дата и время комментария
);
// Проверяем, разрешен ли комментарий
$comment_status = wp_allow_comment( $commentdata );
// Проверяем результат
if ( is_wp_error( $comment_status ) ) {
// Если ошибка, выводим сообщение
return 'Ошибка: ' . $comment_status->get_error_message();
} elseif ( $comment_status === 'spam' ) {
// Если комментарий помечен как спам
return 'Ваш комментарий помечен как спам.';
} elseif ( $comment_status == 1 ) {
// Если комментарий подтвержден
wp_insert_comment( $commentdata );
return 'Комментарий успешно добавлен!';
} else {
// Если комментарий не разрешен
return 'Комментарий не разрешен.';
}
}
// Пример использования функции
$response = handle_new_comment( 'Александр', 'Это тестовый комментарий', '[email protected]' );
echo $response;
Описание работы примера
- Создается массив
$commentdata
, который содержит информацию о комментарии. - Вызывается функция
wp_allow_comment()
, которая проверяет допустимость комментария. - В зависимости от результата проверки:
- Если функция возвращает объект
WP_Error
, выводится сообщение об ошибке. - Если комментарий помечен как спам, выводится соответствующее уведомление.
- Если комментарий подтвержден, он добавляется в базу данных с помощью функции
wp_insert_comment()
. - В случае, если комментарий не разрешен, выводится уведомление об отказе.
- Если функция возвращает объект
Использование в WordPress
Внутри WordPress эта функция используется при добавлении нового комментария. Например, в функции wp_new_comment()
результат работы wp_allow_comment()
определяет, будет ли комментарий добавлен в базу данных с определённым статусом (например, 1
— подтвержден или 'spam'
— спам).
$commentdata['comment_approved'] = wp_allow_comment( $commentdata );
$done = wp_insert_comment( $commentdata );
if( $done ){
// Комментарий добавлен в базу данных
}
Хуки из функции
Функция содержит несколько хуков, которые можно использовать для расширения функциональности:
duplicate_comment_id
— Триггерится при обнаружении дублирующего комментария.comment_duplicate_trigger
— Срабатывает, если обнаружен дубликат комментария.comment_duplicate_message
— Сообщение, показываемое при попытке добавить дубликат.check_comment_flood
— Проверка флуда комментариями.wp_is_comment_flood
— Проверка на флад.comment_flood_message
— Сообщение, показываемое при флуде.pre_comment_approved
— Хук, позволяющий изменять статус комментария перед подтверждением.
Заключение
Функция wp_allow_comment()
играет важную роль в управлении комментариями на сайте WordPress. Она помогает защитить сайт от спама, дублирующих комментариев и флуда.