WordPress Version: 6.1
/**
* Deletes metadata by meta ID.
*
* @since 3.3.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
* or any other object type with an associated meta table.
* @param int $meta_id ID for a specific meta row.
* @return bool True on successful delete, false on failure.
*/
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
* (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_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`
* - `delete_termmeta`
* - `delete_usermeta`
*
* @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`
* - `deleted_termmeta`
* - `deleted_usermeta`
*
* @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;
}