sanitize_post()
Очищает каждое поле указанного объекта/массива поста.
Функция очищает очень легко, например при типе очистке db
экранирующие слэши не ставятся.
Если тип очистки указан как raw
, то очистка будет минимальной: только некоторые из числовых полей будут превращены в число: ID
, post_parent
, menu_order
, ancestors
. Все остальное вернется как передано.
post_content очищается от тегов при фильтрах edit
, display
на основе доступных тегов для прав текущего пользователя.
При очистке типом db
функция не экранирует символы.
Хуков нет.
Возвращает
Объект|WP_Post|Массив
. Очищенный объект/массив данных переданный в $post.
Использование
sanitize_post( $post, $context );
- $post(объект/WP_Post/массив) (обязательный)
- Данные записи (поста), которые нужно очистить.
- $context(строка)
Тип очистки данных. Может быть:
raw
- для использования в строке.edit
- для дальнейшего редактирования.db
- для использования в запросе.display
- для вывода на экран.attribute
- для использования в атрибуте.
По умолчанию: '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'); // собираем $data из параметров $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' => 'Контент " кавычка. <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) Контент " кавычка. <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) js */
Заметки
- Смотрите: sanitize_post_field()
Список изменений
С версии 2.3.0 | Введена. |