函数文档

unregister_meta_key()

💡 云策文档标注

概述

unregister_meta_key() 函数用于从已注册的元数据键列表中注销一个元数据键,适用于 WordPress 中的对象类型如 'post'、'user' 等。它通过移除相关的 sanitize_callback 和 auth_callback 过滤器,并清理全局变量 $wp_meta_keys 来实现注销操作。

关键要点

  • 函数接受三个参数:$object_type(对象类型,必需)、$meta_key(元数据键,必需)和 $object_subtype(对象子类型,可选,默认为空字符串)。
  • 返回值:如果注销成功返回 true,如果元数据键未注册则返回 false。
  • 函数内部会检查元数据键是否已注册,移除相关的 sanitize_callback 和 auth_callback 过滤器,并清理 $wp_meta_keys 全局数组。
  • 相关函数包括 registered_meta_key_exists() 用于检查注册状态,remove_filter() 用于移除过滤器钩子。
  • 自 WordPress 4.6.0 引入,4.9.8 版本添加了 $object_subtype 参数。

代码示例

function unregister_meta_key( $object_type, $meta_key, $object_subtype = '' ) {
    global $wp_meta_keys;

    if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
        return false;
    }

    $args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];

    if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
        if ( ! empty( $object_subtype ) ) {
            remove_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'] );
        } else {
            remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
        }
    }

    if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
        if ( ! empty( $object_subtype ) ) {
            remove_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'] );
        } else {
            remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
        }
    }

    unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );

    // Do some clean up.
    if ( empty( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
        unset( $wp_meta_keys[ $object_type ][ $object_subtype ] );
    }
    if ( empty( $wp_meta_keys[ $object_type ] ) ) {
        unset( $wp_meta_keys[ $object_type ] );
    }

    return true;
}

📄 原文内容

Unregisters a meta key from the list of registered keys.

Parameters

$object_typestringrequired
Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term', 'user', or any other object type with an associated meta table.
$meta_keystringrequired
Metadata key.
$object_subtypestringoptional
The subtype of the object type. Default empty string.

Return

bool True if successful. False if the meta key was not registered.

Source

function unregister_meta_key( $object_type, $meta_key, $object_subtype = '' ) {
	global $wp_meta_keys;

	if ( ! registered_meta_key_exists( $object_type, $meta_key, $object_subtype ) ) {
		return false;
	}

	$args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];

	if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			remove_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['sanitize_callback'] );
		} else {
			remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
		}
	}

	if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
		if ( ! empty( $object_subtype ) ) {
			remove_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $args['auth_callback'] );
		} else {
			remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
		}
	}

	unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );

	// Do some clean up.
	if ( empty( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
		unset( $wp_meta_keys[ $object_type ][ $object_subtype ] );
	}
	if ( empty( $wp_meta_keys[ $object_type ] ) ) {
		unset( $wp_meta_keys[ $object_type ] );
	}

	return true;
}

Changelog

Version Description
4.9.8 The $object_subtype parameter was added.
4.6.0 Introduced.