# SANITIZE_POST() │ WP 2.3.0
Функция для очистки данных поста.
Функция sanitize_post() очищает каждое поле поста. Если вы передаёте контекст 'raw', то будет выполнена минимальная очистка числовых полей.
**Использует:** sanitize_post_field()
**Время выполнения:** 1 раз — 0.000089 сек (очень быстро) | 50000 раз — 3.16 сек (быстро)
**Хуки:** Нет.
## ВОЗВРАТ
Возвращает объект WP_Post или массив. Это будет очищенный пост или массив (с тем же типом, что и $post).
## ИСПОЛЬЗОВАНИЕ
```php
sanitize_post( $post, $context );
$post(объект|WP_Post|массив) (обязательный) — объект или массив поста.$context(строка) — контекст, в котором будет производиться очистка полей поста. Принимает значения: 'raw', 'edit', 'db', 'display', 'attribute' или 'js'.- По умолчанию: 'display'
ПРИМЕРЫ
Пример 1: Очистка данных
Предположим, что мы получили данные постов из запроса $_POST и хотим их очистить перед тем, как отобразить на экране. Это можно сделать следующим образом:
$post_data = $_POST['post_data'];
$post_data = sanitize_post( $post_data );
Или для использования в SQL-запросе:
$post_data = sanitize_post( $post_data, 'db' );
// ЗАМЕТКА: результат не защищён от SQL-инъекций
Пример 2: Очистка перед добавлением в базу данных
Пример из функции wp_insert_post(). Я убрал много кода, чтобы показать только очистку:
$postarr = $_POST['post_data'];
// Удаляем данные о предыдущей очистке
unset( $postarr['filter'] );
// Очищаем
$postarr = sanitize_post($postarr, 'db');
// Собираем данные из параметров $postarr .........
// Убираем обратные слэши для $wpdb->insert()
$data = wp_unslash( $data );
// Вставляем
$wpdb->insert( $wpdb->posts, $data );
Пример 3: Как очищаются данные
Предположим, у нас есть следующие данные в $_POST['post_data']:
$post_data = array(
'ID' => '6129',
'post_author' => '1',
'post_date' => '2015-09-03 01:36:12',
'post_content' => 'Содержимое "цитаты".
foo ',
'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) Содержимое "цитаты".
foo
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' );
После очистки данные будут выглядеть так:
ID = (integer) 6129
post_author = (string) 1
post_date = (string) 2015-09-03 01:36:12
post_content = (string) Содержимое "цитаты".
foo
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' );
$post_data = sanitize_post( $post_data, 'db' );
$post_data = sanitize_post( $post_data, 'display' );
$post_data = sanitize_post( $post_data, 'attribute' );
ЗАМЕТКИ
- Функция использует
sanitize_post_field()для очистки всех полей.
ИСТОРИЯ ИЗМЕНЕНИЙ
С версии 2.3.0 — введена.