WP_ALLOW_COMMENT() │ WP 2.0.0
Функция WP_ALLOW_COMMENT() проверяет, разрешено ли оставление комментария.
Используемые функции
check_comment()wp_blacklist_check()
Крюки (Hooks) из функции
duplicate_comment_idcomment_duplicate_triggercomment_duplicate_messagecheck_comment_floodwp_is_comment_floodcomment_flood_message
Возврат
Функция возвращает:
int|string|WP_Error. Для разрешенных комментариев возвращается статус одобрения (0,1,'spam','trash'). Если$wp_errorравноtrue, то для запрещенных комментариев функция вернет объектWP_Error.
Использование
wp_allow_comment( $commentdata, $wp_error );
$commentdata(обязательный) — массив, который содержит информацию о комментарии.$wp_error(по умолчаниюfalse) — если установлен вtrue, то для запрещенного комментария функция вернет объектWP_Error, а не выполнитwp_die().
Примеры
Пример 1
$commentdata['comment_approved'] = wp_allow_comment( $commentdata );
$done = wp_insert_comment( $commentdata );
if( $done ){
// Комментарий добавлен в базу данных
}
Этот пример показывает, как функция wp_new_comment() использует wp_allow_comment(). После того как комментарий одобрен (или не одобрен), функция wp_insert_comment() добавляет его в базу данных.
Комментарий будет записан в базу данных, даже если он не одобрен. Статус, возвращаемый wp_allow_comment(), поможет определить, нужно ли обновлять количество комментариев к посту.
Добавьте свой пример
Заметки
- Глобальная переменная
$wpdb— это объект абстракции базы данных WordPress.
Изменения
- С версии 2.0.0 — функция была введена.
- С версии 4.7.0 — параметр
$avoid_dieдобавлен, позволяющий функции возвращать объектWP_Errorвместо завершения работы с ошибкой. - С версии 5.5.0 — параметр
$avoid_dieпереименован в$wp_error.
Код WP_ALLOW_COMMENT
Функция wp_allow_comment находится в файле wp-includes/comment.php.
function wp_allow_comment( $commentdata, $wp_error = false ) {
global $wpdb;
// Простая проверка на дубликаты.
$dupe = $wpdb->prepare(
"SELECT comment_ID FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_parent = %s AND comment_approved != 'trash' AND ( comment_author = %s ",
wp_unslash( $commentdata['comment_post_ID'] ),
wp_unslash( $commentdata['comment_parent'] ),
wp_unslash( $commentdata['comment_author'] )
);
if ( $commentdata['comment_author_email'] ) {
$dupe .= $wpdb->prepare(
'AND comment_author_email = %s ',
wp_unslash( $commentdata['comment_author_email'] )
);
}
$dupe .= $wpdb->prepare(
') AND comment_content = %s LIMIT 1',
wp_unslash( $commentdata['comment_content'] )
);
$dupe_id = $wpdb->get_var( $dupe );
// Фильтрует ID дублирующего комментария, если он найден.
$dupe_id = apply_filters( 'duplicate_comment_id', $dupe_id, $commentdata );
if ( $dupe_id ) {
// Вызов после обнаружения дубликата.
do_action( 'comment_duplicate_trigger', $commentdata );
// Сообщение об ошибке для дубликата комментария.
$comment_duplicate_message = apply_filters( 'comment_duplicate_message', __( 'Обнаружен дубликат комментария; похоже, вы уже это говорили!' ) );
if ( $wp_error ) {
return new WP_Error( 'comment_duplicate', $comment_duplicate_message, 409 );
} else {
if ( wp_doing_ajax() ) {
die( $comment_duplicate_message );
}
wp_die( $comment_duplicate_message, 409 );
}
}
// Проверка на "наводнение" комментариями.
do_action(
'check_comment_flood',
$commentdata['comment_author_IP'],
$commentdata['comment_author_email'],
$commentdata['comment_date_gmt'],
$wp_error
);
$is_flood = apply_filters(
'wp_is_comment_flood',
false,
$commentdata['comment_author_IP'],
$commentdata['comment_author_email'],
$commentdata['comment_date_gmt'],
$wp_error
);
if ( $is_flood ) {
$comment_flood_message = apply_filters( 'comment_flood_message', __( 'Вы слишком быстро оставляете комментарии. Пожалуйста, замедлитесь.' ) );
return new WP_Error( 'comment_flood', $comment_flood_message, 429 );
}
return wp_check_comment_data( $commentdata );
}
Связанные функции
add_comment_meta()clean_comment_cache()comment_link()comment_form()wp_insert_comment()wp_delete_comment()
Эти функции могут быть полезны для работы с комментариями в WordPress.