Функция 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 и других местах.
Используя эту функцию, можно легко применить фильтры к полям термина и обеспечить безопасность и стабильность вашего сайта или плагина.
