Функция wp_kses_post()
очищает переданные данные, оставляя только разрешенные HTML-теги, которые могут использоваться в контенте поста (например, заголовки, параграфы, списки, изображения). Она предназначена для обработки данных контента поста и используется для предотвращения внедрения нежелательных тегов или атрибутов, таких как <script>
или опасные атрибуты тегов.
Эта функция удобна для безопасного вывода пользовательского контента, исключая возможность XSS-атак или внедрения вредоносного кода.
wp_kses_post( string $data ): string
Параметры
- $data
(string)
— Строка с контентом, которую нужно очистить от недопустимых HTML-тегов.- Этот параметр является обязательным.
Возвращаемое значение
Возвращает очищенную строку, содержащую только разрешенные HTML-теги и атрибуты.
Использование
Функция wp_kses_post()
ожидает строку без слэшей. Если вы обрабатываете данные, полученные из глобальных массивов, таких как $_POST
, необходимо предварительно удалить добавленные слэши с помощью функции wp_unslash()
.
Пример 1: Очищение пользовательского ввода
Для очистки пользовательских данных перед их записью в базу данных или выводом на экран можно использовать следующую конструкцию:
// Получаем данные из $_POST и удаляем слэши
$cleaned_text = wp_unslash( $_POST['text'] );
// Очищаем строку от нежелательных HTML тегов
$cleaned_text = wp_kses_post( $cleaned_text );
// Теперь можно безопасно выводить или сохранять $cleaned_text
echo $cleaned_text;
Пример 2: Очистка данных массива
Можно использовать wp_kses_post()
для очистки данных массива, переданного через форму:
// Применяем wp_kses_post к каждому элементу массива
$cleaned_array = array_map( 'wp_kses_post', $_POST['some_array'] );
Этот подход гарантирует, что все элементы массива будут безопасно очищены от вредоносных HTML-тегов перед обработкой или сохранением.
Пример 3. Вывод сообщения в админке
Функцию wp_kses_post()
можно использовать для безопасного вывода сообщений в административной панели WordPress:
if ( ! version_compare( PHP_VERSION, '5.6', '>=' ) ) {
add_action( 'admin_notices', 'wpdocs_fail_php_version' );
}
/**
* Админ-уведомление о минимальной версии PHP.
*/
function wpdocs_fail_php_version() {
if ( isset( $_GET['activate'] ) ) {
unset( $_GET['activate'] );
}
$message = sprintf( __( '<strong>Мой Плагин</strong> требует версию PHP %s+, текущая версия плагина НЕ ЗАПУЩЕНА.', 'wpdocs-text-domain' ), '5.6' );
$html_message = sprintf( '<div class="error">%s</div>', wpautop( $message ) );
// Очищаем HTML перед выводом
echo wp_kses_post( $html_message );
}
В этом примере используется wp_kses_post()
для очистки сообщения с HTML-тегами, которые можно безопасно вывести в административной панели WordPress.
Особенности
- wp_kses_post() работает на основе более общей функции
wp_kses()
, но с предопределенным набором разрешенных HTML-тегов, подходящих для контента постов. - Ожидает данные без слэшей — если вы работаете с глобальными переменными (
$_POST
,$_GET
), не забудьте предварительно использоватьwp_unslash()
. - Использование функции позволяет защитить сайт от XSS-атак и внедрения опасного кода через пользовательские формы и контент.
Заключение
Функция wp_kses_post()
является важным инструментом для очистки контента постов в WordPress, оставляя только безопасные HTML-теги и атрибуты. Это гарантирует, что даже если пользователь или злоумышленник попытается внедрить вредоносный код, такие попытки будут заблокированы, а ваш сайт останется защищенным.