Функция sanitize_term_field()
в WordPress используется для очистки (санитизации) значения поля термина (категории, метки и других таксономий) в зависимости от контекста. Это важная функция для обеспечения безопасности и корректного вывода данных термина в различных ситуациях — будь то отображение на экране, использование в JavaScript, база данных и другие сценарии.
Зачем нужна очистка данных?
Очистка данных необходима для предотвращения инъекций вредоносного кода, защиты от XSS (межсайтового скриптинга), и для приведения данных к соответствующему виду в зависимости от контекста использования (например, на экране или в базе данных).
mixed sanitize_term_field( string $field, string $value, int $term_id, string $taxonomy, string $context )
Параметры
- $field (строка, обязательный): Название поля термина, которое нужно очистить. Например:
parent
,term_id
,count
, и т.д. - $value (строка, обязательный): Значение, которое нужно отфильтровать.
- $term_id (число, обязательный): ID термина, к которому относится значение.
- $taxonomy (строка, обязательный): Название таксономии, к которой принадлежит термин.
- $context (строка, обязательный): Контекст, в котором используется значение. Возможные значения:
'raw'
,'edit'
,'db'
,'display'
,'rss'
,'attribute'
,'js'
. По умолчанию —'display'
.
Возвращаемое значение
- Разное: Функция возвращает очищенное значение поля. Это может быть строка, число, массив или объект в зависимости от типа поля и контекста.
Контексты использования
raw
: Возвращает сырое значение без очистки.display
: Очищает значение для вывода на экран (по умолчанию).edit
: Применяет фильтрыesc_html()
для поляdescription
иesc_attr()
для других текстовых полей.db
: Очистка для безопасного сохранения в базе данных.attribute
: Использует фильтрesc_attr()
для безопасного использования в HTML-атрибутах.js
: Применяет фильтрesc_js()
для безопасного использования в JavaScript.rss
: Фильтры для вывода данных в RSS.
1. Очистка поля термина для вывода на экран
Этот пример очищает значение поля для безопасного вывода на экран:
$term_id = 5; // ID термина
$taxonomy = 'category'; // Таксономия
$field = 'name'; // Поле термина, например, имя категории
$value = 'Пример категории';
$sanitized_value = sanitize_term_field( $field, $value, $term_id, $taxonomy, 'display' );
echo $sanitized_value;
В этом примере значение поля термина «Пример категории» будет очищено для вывода на экран, обеспечивая защиту от возможных XSS-атак.
2. Получение и очистка термина для редактирования
Здесь мы очищаем значение поля термина для безопасного использования в форме редактирования (применение фильтров esc_attr()
и esc_html()
):
$term_id = 3;
$taxonomy = 'post_tag';
$field = 'description';
$value = 'Описание термина с <script>alert("XSS")</script>';
$sanitized_value = sanitize_term_field( $field, $value, $term_id, $taxonomy, 'edit' );
echo $sanitized_value;
В этом примере все потенциально вредоносные HTML-теги будут экранированы, чтобы обеспечить безопасность данных на странице редактирования.
3. Использование с JavaScript
Этот пример показывает, как очистить значение для безопасного использования в JavaScript, используя фильтр esc_js()
:
$term_id = 7;
$taxonomy = 'custom_taxonomy';
$field = 'slug';
$value = 'пример-термина';
$sanitized_value = sanitize_term_field( $field, $value, $term_id, $taxonomy, 'js' );
echo '<script>var termSlug = "' . $sanitized_value . '";</script>';
Значение будет отфильтровано так, чтобы его можно было безопасно использовать внутри JavaScript-кода.
4. Пример использования в функции get_term_field()
Функция get_term_field()
в WordPress использует sanitize_term_field()
для получения и очистки поля термина:
function get_term_field( $field, $term, $taxonomy, $context = 'display' ) {
$term = (int) $term;
$term = get_term( $term, $taxonomy );
if ( is_wp_error($term) )
return $term;
if ( !is_object($term) )
return '';
if ( !isset($term->$field) )
return '';
return sanitize_term_field($field, $term->$field, $term->term_id, $taxonomy, $context);
}
Эта функция извлекает и очищает значение конкретного поля термина для указанного контекста.
Заключение
Функция sanitize_term_field()
является важным инструментом для разработчиков WordPress, поскольку она позволяет очищать данные полей терминов в зависимости от контекста их использования. Это помогает защитить сайт от различных уязвимостей, таких как XSS, и гарантирует корректное использование данных в HTML, JavaScript, RSS и других местах.
Используя эту функцию, можно легко применить фильтры к полям термина и обеспечить безопасность и стабильность вашего сайта или плагина.