delete_metadata_by_mid()
云策文档标注
概述
delete_metadata_by_mid() 函数用于通过 meta ID 删除元数据。它接受元数据类型和 meta ID 作为参数,执行删除操作并返回布尔值表示成功或失败。
关键要点
- 参数:$meta_type(字符串,必需)指定元数据类型,如 'post'、'user' 等;$meta_id(整数,必需)指定要删除的元数据行的 ID。
- 返回值:成功删除返回 true,失败返回 false。
- 功能:验证参数后,从数据库表中删除指定 meta ID 的元数据,并清除相关缓存。
- 钩子:包括 delete_{$meta_type}_meta、deleted_{$meta_type}_meta 等,用于在删除前后执行自定义操作。
- 相关函数:与 wpdb::delete()、wp_cache_delete() 等配合使用,确保数据一致性和性能。
代码示例
// 示例:删除一个 post 类型的元数据,meta ID 为 123
$result = delete_metadata_by_mid('post', 123);
if ($result) {
echo '元数据删除成功';
} else {
echo '元数据删除失败';
}注意事项
- 确保 $meta_type 有效且 $meta_id 为正整数,否则函数会返回 false。
- 删除操作会触发相关钩子,开发者可以利用这些钩子进行扩展或日志记录。
- 函数内部会清除缓存,但需注意在高并发场景下可能存在的缓存一致性问题。
原文内容
Deletes metadata by meta ID.
Parameters
$meta_typestringrequired-
Type of object metadata is for. Accepts
'blog','post','comment','term','user', or any other object type with an associated meta table. $meta_idintrequired-
ID for a specific meta row.
Source
function delete_metadata_by_mid( $meta_type, $meta_id ) {
global $wpdb;
// Make sure everything is valid.
if ( ! $meta_type || ! is_numeric( $meta_id ) || floor( $meta_id ) != $meta_id ) {
return false;
}
$meta_id = (int) $meta_id;
if ( $meta_id <= 0 ) {
return false;
}
$table = _get_meta_table( $meta_type );
if ( ! $table ) {
return false;
}
// Object and ID columns.
$column = sanitize_key( $meta_type . '_id' );
$id_column = ( 'user' === $meta_type ) ? 'umeta_id' : 'meta_id';
/**
* Short-circuits deleting metadata of a specific type by meta ID.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
* - `delete_blog_metadata_by_mid`
* - `delete_post_metadata_by_mid`
* - `delete_comment_metadata_by_mid`
* - `delete_term_metadata_by_mid`
* - `delete_user_metadata_by_mid`
*
* @since 5.0.0
*
* @param null|bool $delete Whether to allow metadata deletion of the given type.
* @param int $meta_id Meta ID.
*/
$check = apply_filters( "delete_{$meta_type}_metadata_by_mid", null, $meta_id );
if ( null !== $check ) {
return (bool) $check;
}
// Fetch the meta and go on if it's found.
$meta = get_metadata_by_mid( $meta_type, $meta_id );
if ( $meta ) {
$object_id = (int) $meta->{$column};
/** This action is documented in wp-includes/meta.php */
do_action( "delete_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
// Old-style action.
if ( 'post' === $meta_type || 'comment' === $meta_type ) {
/**
* Fires immediately before deleting post or comment metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta
* object type (post or comment).
*
* Possible hook names include:
*
* - `delete_postmeta`
* - `delete_commentmeta`
*
* @since 3.4.0
*
* @param int $meta_id ID of the metadata entry to delete.
*/
do_action( "delete_{$meta_type}meta", $meta_id );
}
// Run the query, will return true if deleted, false otherwise.
$result = (bool) $wpdb->delete( $table, array( $id_column => $meta_id ) );
// Clear the caches.
wp_cache_delete( $object_id, $meta_type . '_meta' );
/** This action is documented in wp-includes/meta.php */
do_action( "deleted_{$meta_type}_meta", (array) $meta_id, $object_id, $meta->meta_key, $meta->meta_value );
// Old-style action.
if ( 'post' === $meta_type || 'comment' === $meta_type ) {
/**
* Fires immediately after deleting post or comment metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta
* object type (post or comment).
*
* Possible hook names include:
*
* - `deleted_postmeta`
* - `deleted_commentmeta`
*
* @since 3.4.0
*
* @param int $meta_id Deleted metadata entry ID.
*/
do_action( "deleted_{$meta_type}meta", $meta_id );
}
return $result;
}
// Meta ID was not found.
return false;
}
Hooks
- do_action( “deleted_{$meta_type}meta”, int $meta_id )
-
Fires immediately after deleting post or comment metadata of a specific type.
- do_action( “deleted_{$meta_type}_meta”, string[] $meta_ids, int $object_id, string $meta_key, mixed $_meta_value )
-
Fires immediately after deleting metadata of a specific type.
- do_action( “delete_{$meta_type}meta”, int $meta_id )
-
Fires immediately before deleting post or comment metadata of a specific type.
- do_action( “delete_{$meta_type}_meta”, string[] $meta_ids, int $object_id, string $meta_key, mixed $_meta_value )
-
Fires immediately before deleting metadata of a specific type.
- apply_filters( “delete_{$meta_type}_metadata_by_mid”, null|bool $delete, int $meta_id )
-
Short-circuits deleting metadata of a specific type by meta ID.
Changelog
| Version | Description |
|---|---|
| 3.3.0 | Introduced. |