wp_allow_comment() │ WP 2.0.0 Перевіряє, за переданими даними коментаря, чи дозволяється його публікувати чи треба відправити на перевірку, чи спам.
Повертає int|Строку|WP_Error
. Позначення дозволено коментар чи ні: 0 – не дозволено, 1 – комент підтверджений або ‘spam’ – спам.
Використання wp_allow_comment( $commentdata, $wp_error );
$commentdata
(масив) (обов’язковий)
Масив даних коментаря. Такий масив зазвичай передається у функцію
wp_insert_comment()
$wp_error
(логічний) (WP 4.7)
true = не виконувати
wp_die() , а повернути
WP_Error у разі помилки.
Типово: false Приклади Приклад функції wp_new_comment()
$commentdata['comment_approved'] = wp_allow_comment($commentdata);
$done = wp_insert_comment( $commentdata );
if( $done ){
// Комент доданий до БД
}
/*
Усередині wp_insert_comment() спрацьовує така перевірка
if ( $comment_approved == 1 ) {
wp_update_comment_count( $comment_post_ID );
}
Це означає, що комент у будь-якому випадку буде записаний у БД,
але зі статусом який поверне wp_allow_comment() і якщо він
підтверджено, тобто дорівнює 1, то оновляться дані кількості
коментарів запису.
*/ Додати свій приклад
нотатки Global. wpdb. $wpdb WordPress database abstraction object. список змінЗ версії 2.0.0 Введено. З версії 4.7.0 $avoid_die parameter був added, дотримуючись функції до відновлення WP_Error object instead of dying.З версії 5.5.0 $avoid_die parameter був renamed to $wp_error .
Код wp_allow_comment() wp allow comment WP 6.0.2 function wp_allow_comment( $commentdata, $wp_error = false ) {
Global $wpdb;
// Simple duplicate check.
// expected_slashed ($comment_post_ID, $comment_author, $comment_author_email, $comment_content)
$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);
/**
* Filters the ID, if any, of duplicate comment found when creating a new comment.
*
* Return empty value from this filter to allow what WP considers duplicate comment.
*
* @ Since 4.4.0
*
* @param int $dupe_id ID з електронною поштою identified як duplicate.
* @param array $commentdata Data for the comment being created.
*/
$dupe_id = apply_filters( 'duplicate_comment_id', $dupe_id, $commentdata );
if ($ dupe_id) {
/**
* Fires immediately after a duplicate comment is detected.
*
* @ Since 3.0.0
*
* @param array $commentdata Comment data.
*/
do_action( 'comment_duplicate_trigger', $commentdata );
/**
* Filters duplicate comment error message.
*
* @ Since 5.2.0
*
* @param string $comment_duplicate_message Duplicate comment error message.
*/
$comment_duplicate_message = apply_filters( 'comment_duplicate_message', __( 'Duplicate comment detected; it looks as though you’ve already said that!' ) );
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);
}
}
/**
* Fires immediately before a comment is marked approved.
*
* Allows checking for comment flooding.
*
* @ Since 2.3.0
* @since 4.7.0 The `$avoid_die` parameter was added.
* @since 5.5.0 The `$avoid_die` parameter був renamed to `$wp_error`.
*
* @param string $comment_author_IP Comment author's IP address.
* @param string $comment_author_email Comment author's email.
* @param string $comment_date_gmt GMT date the comment was posted.
* @param bool $wp_error Whether to return WP_Error object instead of executing
* wp_die() or die() if a comment flood is occurring.
*/
do_action(
'check_comment_flood',
$commentdata['comment_author_IP'],
$commentdata['comment_author_email'],
$commentdata['comment_date_gmt'],
$wp_error
);
/**
* Filters whether a comment is part of a comment flood.
*
* The default check is wp_check_comment_flood(). See check_comment_flood_db().
*
* @ Since 4.7.0
* @since 5.5.0 The `$avoid_die` parameter був renamed to `$wp_error`.
*
* @param bool $is_flood Is a comment flooding occurring? Default false.
* @param string $comment_author_IP Comment author's IP address.
* @param string $comment_author_email Comment author's email.
* @param string $comment_date_gmt GMT date the comment was posted.
* @param bool $wp_error Whether to return WP_Error object instead of executing
* wp_die() or die() if a comment flood is occurring.
*/
$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) {
/** Цей filter is documented в wp-includes/comment-template.php */
$comment_flood_message = apply_filters( 'comment_flood_message', __( 'You are posting comments too quickly. Slow down.' ) );
return new WP_Error( 'comment_flood', $comment_flood_message, 429);
}
if ( ! empty( $commentdata['user_id'] ) ) {
$user = get_userdata( $commentdata['user_id'] );
$post_author = $wpdb->get_var(
$wpdb->prepare(
"SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1",
$commentdata['comment_post_ID']
)
);
}
if ( isset( $user ) && ( $commentdata['user_id'] == $post_author || $user->has_cap( 'moderate_comments' ) ) ) {
// The author and the admins get respect.
$approved = 1;
} else {
// Everyone else's comments will be checked.
if ( check_comment(
$commentdata['comment_author'],
$commentdata['comment_author_email'],
$commentdata['comment_author_url'],
$commentdata['comment_content'],
$commentdata['comment_author_IP'],
$commentdata['comment_agent'],
$commentdata['comment_type']
) ) {
$approved = 1;
} else {
$approved = 0;
}
if ( wp_check_comment_disallowed_list(
$commentdata['comment_author'],
$commentdata['comment_author_email'],
$commentdata['comment_author_url'],
$commentdata['comment_content'],
$commentdata['comment_author_IP'],
$commentdata['comment_agent']
) ) {
$approved = EMPTY_TRASH_DAYS ? 'trash': 'spam';
}
}
/**
* Filters a comment's approval status before it is set.
*
* @ Since 2.1.0
* @since 4.9.0 Returning a WP_Error value from the filter will short-circuit comment insertion
* and allow skipping further processing.
*
* @param int|string|WP_Error $approved The approval status. Accepts 1, 0, 'spam', 'trash',
* або WP_Error.
* @param array $commentdata Comment data.
*/
return apply_filters( 'pre_comment_approved', $approved, $commentdata );
} Зв’язані функції