wp_new_comment() WP 1.5.0

Додає новий коментар до Бази Даних. Фільтрує дані.

Фільтрує всі дані, щоб переконатися, що всі поля передані правильно, деякі поля створюються функцією і їх не потрібно вказувати (IP адресс, User Agent).

Завдання функції попередньо опрацювати дані коментаря та передати їх wp_insert_comment() .

Також дивіться функцію wp_handle_comment_submission() , яка є обгорткою для цієї функції.

  • Використовує хук-подію: comment_post , який передає ID коментаря та спрацьовує одразу після додавання коментаря.
  • Використовує фільтр: preprocess_comment, завдяки якому можна змінити дані коментаря перед тим, як функція почне їх обробляти.
Працює на основі:
wp_insert_comment()
Основа для:
wp_handle_comment_submission()

Хуки з функції

Повертає

int|false|WP_Error. ID коментаря, який було додано. Або false у разі невдачі.

Використання

wp_new_comment( $commentdata, $wp_error );
$commentdata
(масив) (обов’язковий)

Асоціативний масив даних коментаря. Ключі масиву – поля таблиці в БД.

Поле comment_IDвказувати не потрібно – воно створюється автоматично. Інші поля дивіться в описі wp_insert_comment() .

Аргумент comment_approvedзавжди дорівнює значенню функції wp_allow_comment() . Тобто. якщо ми вкажемо його вручну, то вказане значення буде проігноровано.

Щоб не вказати значення comment_approved, можна скористатися фільтром: pre_comment_approved :

add_filter( 'pre_comment_approved', fn()=> 1);
// або
add_filter( 'pre_comment_approved', fn()=> 0 );

$wp_error
(логічний)
true = не виконувати
wp_die() , а повернути
WP_Error у разі помилки. C WP 4.7.


Типово: false

Приклади

0

#1 Приклад додавання нового коментаря

Коментар буде додано до посту 418 та буде відповіддю на коментар 315:

// створюємо масив даних нового коментаря
$commentdata = [
	'comment_post_ID' => 418,
	'comment_author' => 'Перевірка',
	'comment_author_email' => '[email protected]',
	'comment_author_url' => 'http://example.com',
	'comment_content' => 'Текст нового коментаря',
	'comment_type' => 'comment',
	'comment_parent' => 315,
	'user_ID' => 0,
];

// додаємо дані до Бази даних
wp_new_comment( $commentdata );
0

#2 Приклад додавання коментаря за допомогою функціїwp_insert_comment()

У цьому випадку ми маємо самі визначити абсолютно всі поля коментаря:

$ data = [
	'comment_post_ID' => 1,
	'comment_author' => 'admin',
	'comment_author_email' => '[email protected]',
	'comment_author_url' => 'http://',
	'comment_content' => 'текст коменту',
	'comment_type' => 'comment',
	'comment_parent' => 0,
	'user_id' => 1,
	'comment_author_IP' => '127.0.0.1',
	'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)',
	'comment_date' => current_time('mysql'),
	'comment_approved' => 1,
];

wp_insert_comment( $data );

нотатки

  • Дивіться: wp_insert_comment()
  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 1.5.0Введено.
З версії 4.3.0Увімкнено comment_agent and comment_author_IP arguments .
З версії 4.7.0$avoid_die parameter був added, дотримуючись функції до відновлення WP_Error object instead of dying.
З версії 5.5.0$avoid_die parameter був renamed to $wp_error .
З версії 5.5.0Завантажено argument_type argument.

Код wp_new_comment() WP 6.0.2

function wp_new_comment( $commentdata, $wp_error = false ) {
	Global $wpdb;

	if ( isset( $commentdata['user_ID'] ) ) {
		$commentdata['user_ID'] = (int) $commentdata['user_ID'];
		$commentdata['user_id'] = $commentdata['user_ID'];
	}

	$prefiltered_user_id = (isset($commentdata['user_id'])))? (int) $commentdata['user_id'] : 0;

	if ( ! isset( $commentdata['comment_author_IP'] ) ) {
		$commentdata['comment_author_IP'] = $_SERVER['REMOTE_ADDR'];
	}

	if ( ! isset( $commentdata['comment_agent'] ) ) {
		$commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
	}

	/**
	 * Filters comment's data before it is sanitized and inserted into database.
	 *
	 * @ Since 1.5.0
	 * @since 5.6.0 Comment data includes the `comment_agent` and `comment_author_IP` values.
	 *
	 * @param array $commentdata Comment data.
	 */
	$commentdata = apply_filters( 'preprocess_comment', $commentdata );

	$commentdata['comment_post_ID'] = (int) $commentdata['comment_post_ID'];
	if ( isset( $commentdata['user_ID'] ) && $prefiltered_user_id !== (int) $commentdata['user_ID'] ) {
		$commentdata['user_ID'] = (int) $commentdata['user_ID'];
		$commentdata['user_id'] = $commentdata['user_ID'];
	} elseif ( isset( $commentdata['user_id'] ) ) {
		$commentdata['user_id'] = (int) $commentdata['user_id'];
	}

	$commentdata['comment_parent'] = isset( $commentdata['comment_parent'] ) ? absint( $commentdata['comment_parent'] ) : 0;

	$parent_status = ($commentdata['comment_parent'] > 0)? wp_get_comment_status( $commentdata['comment_parent'] ) : '';

	$commentdata['comment_parent'] = ( 'approved' === $parent_status || 'unapproved' === $parent_status ) ? $commentdata['comment_parent'] : 0;

	$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '', $commentdata['comment_author_IP'] );

	$commentdata['comment_agent'] = substr( $commentdata['comment_agent'], 0, 254 );

	if ( empty( $commentdata['comment_date'] ) ) {
		$commentdata['comment_date'] = current_time( 'mysql' );
	}

	if ( empty( $commentdata['comment_date_gmt'] ) ) {
		$commentdata['comment_date_gmt'] = current_time( 'mysql', 1);
	}

	if ( empty( $commentdata['comment_type'] ) ) {
		$commentdata['comment_type'] = 'comment';
	}

	$commentdata = wp_filter_comment( $commentdata );

	$commentdata['comment_approved'] = wp_allow_comment( $commentdata, $wp_error );
	if ( is_wp_error( $commentdata['comment_approved'] ) ) {
		return $commentdata['comment_approved'];
	}

	$comment_ID = wp_insert_comment( $commentdata );
	if ( ! $comment_ID ) {
		$fields = array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content' );

		foreach ( $fields as $field ) {
			if ( isset ( $ comment data [ $ field ] ) ) {
				$commentdata[ $field ] = $wpdb->strip_invalid_text_for_column( $wpdb->comments, $field, $commentdata[ $field ] );
			}
		}

		$commentdata = wp_filter_comment( $commentdata );

		$commentdata['comment_approved'] = wp_allow_comment( $commentdata, $wp_error );
		if ( is_wp_error( $commentdata['comment_approved'] ) ) {
			return $commentdata['comment_approved'];
		}

		$comment_ID = wp_insert_comment( $commentdata );
		if ( ! $comment_ID ) {
			return false;
		}
	}

	/**
	 * Fires immediately after a comment is inserted into database.
	 *
	 * @ Since 1.2.0
	 * @since 4.5.0 The `$commentdata` parameter was added.
	 *
	 * @param int $comment_ID The comment ID.
	 * @param int|string $comment_approved 1 якщо повідомлення не виконано, 0 якщо немає, 'spam' if spam.
	 * @param array $commentdata Comment data.
	 */
	do_action( 'comment_post', $comment_ID, $commentdata['comment_approved'], $commentdata );

	return $comment_ID;
}

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

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