Очистка данных поста с функцией SANITIZE_POST() | WP 2.3.0

# 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 — введена.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *