WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

sanitize_post()WP 2.3.0

Очищает каждое поле указанного объекта/массива поста.

Функция очищает очень легко, например при типе очистке db экранирующие слэши не ставятся.

Если тип очистки указан как raw, то очистка будет минимальной: только некоторые из числовых полей будут превращены в число: ID, post_parent, menu_order, ancestors. Все остальное вернется как передано.

post_content очищается от тегов при фильтрах edit, display на основе доступных тегов для прав текущего пользователя.

При очистке типом db функция не экранирует символы.

Работает на основе: sanitize_post_field()
1 раз — 0.000089 сек (очень быстро) | 50000 раз — 3.16 сек (быстро)

Хуков нет.

Возвращает

Объект|WP_Post|Массив. Очищенный объект/массив данных переданный в $post.

Использование

sanitize_post( $post, $context );
$post(объект/WP_Post/массив) (обязательный)
Данные записи (поста), которые нужно очистить.
$context(строка)

Тип очистки данных. Может быть:

  • raw - для использования в строке.
  • edit - для дальнейшего редактирования.
  • db - для использования в запросе.
  • display - для вывода на экран.
  • attribute - для использования в атрибуте.

По умолчанию: 'display'

Примеры

0

#1 Пример очистки

Допустим мы получаем данные записи в $_POST запросе и прежде чем выводить каждое из них на экран, нам нужно их очистить. Это можно сделать по-отдельности, но гораздо быстрее будет прогнать данные через эту функцию, так:

$post_data = $_POST['post_data'];
$post_data = sanitize_post( $post_data );

// Или для использования в SQL запросе:
$post_data = sanitize_post( $post_data, 'db'); // результат не защищен от sql инъекций
0

#2 Очистка перед добавление в БД

Пример из функции wp_insert_post(), в примере я убрал очень много кода, чтобы показать только суть очистки:

$postarr = $_POST['post_data'];

// удаляем данные о предыдущей очистке
unset( $postarr[ 'filter' ] );

// очищаем
$postarr = sanitize_post($postarr, 'db');

// собираем $data из параметров $postarr .........

// Убираем слэши, их вставит $wpdb->insert
$data = wp_unslash( $data );

// вставляем
$wpdb->insert( $wpdb->posts, $data );
0

#3 Как чистятся данные:

// пусть в $_POST['post_data'] были следующие данные:

$post_data = array(
	'ID'             => '6129',
	'post_author'    => '1',
	'post_date'      => '2015-09-03 01:36:12',
	'post_content'   => 'Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script> ',
	'post_title'     => 'wp_get_post_revision',
	'post_status'    => 'publish',
	'comment_status' => 'open',
	'post_name'      => 'wp_get_post_revision',
	'post_content_filtered' => '',
	'post_parent'    => '0',
	'menu_order'     => '0',
	'post_type'      => 'func',
	'comment_count'  => '0'
);

// выводим
foreach( $post_data as $k => $v ){
	echo "$k = (", gettype($v) ,") ". htmlspecialchars($v) ."\n";
}

/* Получаем:
ID = (string) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script>
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (string) 0
menu_order = (string) 0
post_type = (string) func
comment_count = (string) 0
*/

Теперь давайте посмотрим как выглядят данные после очистки, обращаем внимание на типы:

$post_data = sanitize_post( $post_data, 'raw' ); // raw ----------------

/*
ID = (integer) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script>
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (integer) 0
menu_order = (integer) 0
post_type = (string) func
comment_count = (string) 0
filter = (string) raw
*/

$post_data = sanitize_post( $post_data, 'edit' ); // edit ----------------

/*
ID = (string) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script>
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (string) 0
menu_order = (string) 0
post_type = (string) func
comment_count = (string) 0
filter = (string) edit
*/

$post_data = sanitize_post( $post_data, 'db' ); // db ----------------

/*
ID = (integer) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script>
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (integer) 0
menu_order = (integer) 0
post_type = (string) func
comment_count = (string) 0
filter = (string) db
*/

$post_data = sanitize_post( $post_data, 'display' ); // display ----------------

/*
ID = (integer) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент " кавычка. <br> <foo>foo</foo> <script>нечто</script>
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (integer) 0
menu_order = (integer) 0
post_type = (string) func
comment_count = (string) 0
filter = (string) display
*/

$post_data = sanitize_post( $post_data, 'attribute' ); // attribute ----------------

/*
ID = (string) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Контент &quot; кавычка. &lt;br&gt; &lt;foo&gt;foo&lt;/foo&gt; &lt;script&gt;нечто&lt;/script&gt;
post_title = (string) wp_get_post_revision
post_status = (string) publish
comment_status = (string) open
post_name = (string) wp_get_post_revision
post_content_filtered = (string)
post_parent = (string) 0
menu_order = (string) 0
post_type = (string) func
comment_count = (string) 0
filter = (string) js
*/

Заметки

Список изменений

С версии 2.3.0 Введена.

Код sanitize_post() WP 6.5.2

function sanitize_post( $post, $context = 'display' ) {
	if ( is_object( $post ) ) {
		// Check if post already filtered for this context.
		if ( isset( $post->filter ) && $context == $post->filter ) {
			return $post;
		}
		if ( ! isset( $post->ID ) ) {
			$post->ID = 0;
		}
		foreach ( array_keys( get_object_vars( $post ) ) as $field ) {
			$post->$field = sanitize_post_field( $field, $post->$field, $post->ID, $context );
		}
		$post->filter = $context;
	} elseif ( is_array( $post ) ) {
		// Check if post already filtered for this context.
		if ( isset( $post['filter'] ) && $context == $post['filter'] ) {
			return $post;
		}
		if ( ! isset( $post['ID'] ) ) {
			$post['ID'] = 0;
		}
		foreach ( array_keys( $post ) as $field ) {
			$post[ $field ] = sanitize_post_field( $field, $post[ $field ], $post['ID'], $context );
		}
		$post['filter'] = $context;
	}
	return $post;
}
11 комментариев
    Войти