wp_allow_comment() WP 2.0.0

Перевіряє, за переданими даними коментаря, чи дозволяється його публікувати чи треба відправити на перевірку, чи спам.

  • Обриває роботу скрипта через wp_die() , якщо знайдено дублікат коментаря та $wp_error=false(за замовчуванням).

  • Поверне 1 (комент підтверджено) якщо автор автора коменту має право moderate_commentsабо він автор коментованого запису.
Працює на основі:
check_comment() ,
wp_blacklist_check()

Повертає

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

Приклади

0

#1 Демонстрація

Приклад функції 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 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 );
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *