函数文档

sanitize_term_field()

💡 云策文档标注

概述

sanitize_term_field() 函数用于根据上下文对分类术语字段值进行清理,确保数据在不同使用场景下的安全性。它支持多种上下文选项,并提供了丰富的过滤器以实现自定义过滤。

关键要点

  • 函数根据上下文清理术语字段值,确保数据安全。
  • 支持上下文包括 'raw'、'edit'、'db'、'display'、'rss'、'attribute' 或 'js',默认 'display'。
  • 提供多个过滤器钩子,如 edit_term_{$field}、pre_term_{$field} 等,方便开发者自定义过滤逻辑。
  • 对于整数字段(如 parent、term_id),会自动转换为整型。

代码示例

function sanitize_term_field( $field, $value, $term_id, $taxonomy, $context ) {
    $int_fields = array( 'parent', 'term_id', 'count', 'term_group', 'term_taxonomy_id', 'object_id' );
    if ( in_array( $field, $int_fields, true ) ) {
        $value = (int) $value;
        if ( $value < 0 ) {
            $value = 0;
        }
    }
    // 更多清理逻辑...
}

注意事项

  • 如果未提供上下文或上下文不受支持,将应用默认过滤器。
  • 开发者可以利用现有过滤器钩子进行自定义过滤,无需创建新的过滤函数。

📄 原文内容

Sanitizes the field value in the term based on the context.

Description

Passing a term field value through the function should be assumed to have cleansed the value for whatever context the term field is going to be used.

If no context or an unsupported context is given, then default filters will be applied.

There are enough filters for each context to support a custom filtering without creating your own filter function. Simply create a function that hooks into the filter you need.

Parameters

$fieldstringrequired
Term field to sanitize.
$valuestringrequired
Search for this term value.
$term_idintrequired
Term ID.
$taxonomystringrequired
Taxonomy name.
$contextstringrequired
Context in which to sanitize the term field.
Accepts 'raw', 'edit', 'db', 'display', 'rss', 'attribute', or 'js'. Default 'display'.

Return

mixed Sanitized field.

Source

function sanitize_term_field( $field, $value, $term_id, $taxonomy, $context ) {
	$int_fields = array( 'parent', 'term_id', 'count', 'term_group', 'term_taxonomy_id', 'object_id' );
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
		if ( $value < 0 ) {
			$value = 0;
		}
	}

	$context = strtolower( $context );

	if ( 'raw' === $context ) {
		return $value;
	}

	if ( 'edit' === $context ) {

		/**
		 * Filters a term field to edit before it is sanitized.
		 *
		 * The dynamic portion of the hook name, `$field`, refers to the term field.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed $value     Value of the term field.
		 * @param int   $term_id   Term ID.
		 * @param string $taxonomy Taxonomy slug.
		 */
		$value = apply_filters( "edit_term_{$field}", $value, $term_id, $taxonomy );

		/**
		 * Filters the taxonomy field to edit before it is sanitized.
		 *
		 * The dynamic portions of the filter name, `$taxonomy` and `$field`, refer
		 * to the taxonomy slug and taxonomy field, respectively.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed $value   Value of the taxonomy field to edit.
		 * @param int   $term_id Term ID.
		 */
		$value = apply_filters( "edit_{$taxonomy}_{$field}", $value, $term_id );

		if ( 'description' === $field ) {
			$value = esc_html( $value ); // textarea_escaped
		} else {
			$value = esc_attr( $value );
		}
	} elseif ( 'db' === $context ) {

		/**
		 * Filters a term field value before it is sanitized.
		 *
		 * The dynamic portion of the hook name, `$field`, refers to the term field.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed  $value    Value of the term field.
		 * @param string $taxonomy Taxonomy slug.
		 */
		$value = apply_filters( "pre_term_{$field}", $value, $taxonomy );

		/**
		 * Filters a taxonomy field before it is sanitized.
		 *
		 * The dynamic portions of the filter name, `$taxonomy` and `$field`, refer
		 * to the taxonomy slug and field name, respectively.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed $value Value of the taxonomy field.
		 */
		$value = apply_filters( "pre_{$taxonomy}_{$field}", $value );

		// Back compat filters.
		if ( 'slug' === $field ) {
			/**
			 * Filters the category nicename before it is sanitized.
			 *
			 * Use the 'pre_$taxonomy_$field' hook instead.
			 *
			 * @since 2.0.3
			 *
			 * @param string $value The category nicename.
			 */
			$value = apply_filters( 'pre_category_nicename', $value );
		}
	} elseif ( 'rss' === $context ) {

		/**
		 * Filters the term field for use in RSS.
		 *
		 * The dynamic portion of the hook name, `$field`, refers to the term field.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed  $value    Value of the term field.
		 * @param string $taxonomy Taxonomy slug.
		 */
		$value = apply_filters( "term_{$field}_rss", $value, $taxonomy );

		/**
		 * Filters the taxonomy field for use in RSS.
		 *
		 * The dynamic portions of the hook name, `$taxonomy`, and `$field`, refer
		 * to the taxonomy slug and field name, respectively.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed $value Value of the taxonomy field.
		 */
		$value = apply_filters( "{$taxonomy}_{$field}_rss", $value );
	} else {
		// Use display filters by default.

		/**
		 * Filters the term field sanitized for display.
		 *
		 * The dynamic portion of the hook name, `$field`, refers to the term field name.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed  $value    Value of the term field.
		 * @param int    $term_id  Term ID.
		 * @param string $taxonomy Taxonomy slug.
		 * @param string $context  Context to retrieve the term field value.
		 */
		$value = apply_filters( "term_{$field}", $value, $term_id, $taxonomy, $context );

		/**
		 * Filters the taxonomy field sanitized for display.
		 *
		 * The dynamic portions of the filter name, `$taxonomy`, and `$field`, refer
		 * to the taxonomy slug and taxonomy field, respectively.
		 *
		 * @since 2.3.0
		 *
		 * @param mixed  $value   Value of the taxonomy field.
		 * @param int    $term_id Term ID.
		 * @param string $context Context to retrieve the taxonomy field value.
		 */
		$value = apply_filters( "{$taxonomy}_{$field}", $value, $term_id, $context );
	}

	if ( 'attribute' === $context ) {
		$value = esc_attr( $value );
	} elseif ( 'js' === $context ) {
		$value = esc_js( $value );
	}

	// Restore the type for integer fields after esc_attr().
	if ( in_array( $field, $int_fields, true ) ) {
		$value = (int) $value;
	}

	return $value;
}

Hooks

apply_filters( “edit_term_{$field}”, mixed $value, int $term_id, string $taxonomy )

Filters a term field to edit before it is sanitized.

apply_filters( “edit_{$taxonomy}_{$field}”, mixed $value, int $term_id )

Filters the taxonomy field to edit before it is sanitized.

apply_filters( ‘pre_category_nicename’, string $value )

Filters the category nicename before it is sanitized.

apply_filters( “pre_term_{$field}”, mixed $value, string $taxonomy )

Filters a term field value before it is sanitized.

apply_filters( “pre_{$taxonomy}_{$field}”, mixed $value )

Filters a taxonomy field before it is sanitized.

apply_filters( “term_{$field}”, mixed $value, int $term_id, string $taxonomy, string $context )

Filters the term field sanitized for display.

apply_filters( “term_{$field}_rss”, mixed $value, string $taxonomy )

Filters the term field for use in RSS.

apply_filters( “{$taxonomy}_{$field}”, mixed $value, int $term_id, string $context )

Filters the taxonomy field sanitized for display.

apply_filters( “{$taxonomy}_{$field}_rss”, mixed $value )

Filters the taxonomy field for use in RSS.

Changelog

Version Description
2.3.0 Introduced.