sanitize_post

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

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

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

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

При очистке типом db функция не экранирует символы.
✈ 1 раз = 0.000089с = очень быстро | 50000 раз = 3.16с = быстро

Хуков нет.

Возвращает

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

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

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

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

  • raw – для использования в строке;

  • edit – для дальнейшего редактирования;

  • db – для использования в запросе;

  • display – для вывода на экран;

  • attribute – для использования в атрибуте;
    По умолчанию: ‘display’

Примеры

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

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

// пусть в $_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
*/

Код из


wp-includes/post.php

WP 4.7.2

<?php
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;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *