delete_metadata() │ WP 2.9.0 Видаляє метадані зазначеного об’єкта (пост, користувач, коментар).
Функція викликає фільтр delete_(meta_type)_meta , перед видаленням даних та фільтр deleted_(meta_type)_meta після видалення даних.
Повертає true|false
. true, якщо видалити метадані або false.
Використання delete_metadata( $meta_type, $object_id, $meta_key, $meta_value, $delete_all );
$meta_type
(рядок) (обов’язковий)
Тип об’єкта, з яким буде працювати функція. Наприклад:
post
,
user
,
comment
,
term
.
$object_id
(число) (обов’язковий)
ID об’єкті, метадані якого потрібно видалити. Наприклад ID посту.
$meta_key
(рядок) (обов’язковий)
Назва ключа метаданих, які потрібно видалити. Наприклад: ключ довільного поля запису “title”.
$meta_value
(рядок/масив/число/об’єкт/логічний)
Якщо вказати це значення, то функція спробує знайти та видалити метадані із зазначеним тут значенням, коли в одного об’єкта зберігаються різні метадані з однаковими ключами. Наприклад, у посту 5 є довільні поля: title=значення 1 і title=значення 2, нам потрібно видалити “значення 2”, вказуємо його в цей параметр.
За замовчуванням: ”
$delete_all
(логічний)
Якщо вказати цей параметр у true, то функція проігнорує параметр $object_id і видалить зазначені метадані у всіх об’єктів. За промовчанням false – метадані видаляються лише у зазначеного об’єкта.
Типово: false Приклади #1 Видалимо довільне поле посту Видалимо довільне поле з ключем “title” біля посту 25:
delete_metadata('post', 25, "title"); #2 функція delete_post_meta() Код функції файлу /wp-includes/post.php:
function delete_post_meta( $post_id, $meta_key, $meta_value = '' ) {
// Make sure meta is added to the post, немає revision.
if ( $the_post = wp_is_post_revision($post_id) )
$post_id = $the_post;
return delete_metadata('post', $post_id, $meta_key, $meta_value);
} #3 Видалимо всі метаполі з усієї БД Цей код показує як видалити всі метаполі всіх користувачів із зазначеним ключем:
$meta_key = 'is_collapsed_menu';
$deleted = delete_metadata( 'user', '', $meta_key, '', true );
// $deleted буде містити кількість видалених рядків Додати свій приклад
нотатки Global. wpdb. $wpdb WordPress database abstraction object. список змін Код delete_metadata() delete metadata WP 6.0.2 function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $delete_all = false ) {
Global $wpdb;
if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) && ! $delete_all ) {
return false;
}
$object_id = absint($object_id);
if ( ! $object_id && ! $delete_all ) {
return false;
}
$table = _get_meta_table( $meta_type );
if ( ! $table ) {
return false;
}
$type_column = sanitize_key( $meta_type . '_id' );
$id_column = ( 'user' === $meta_type ) ? 'umeta_id': 'meta_id';
// expected_slashed ($meta_key)
$meta_key = wp_unslash( $meta_key );
$meta_value = wp_unslash( $meta_value );
/**
* Short-circuits deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, або будь-який інший тип with an associated meta table).
* Returning a non-null value буде ефективно short-circuit the function.
*
* Possible hook names include:
*
* - `delete_post_metadata`
* - `delete_comment_metadata`
* - `delete_term_metadata`
* - `delete_user_metadata`
*
* @ Since 3.1.0
*
* @param null|bool $delete Whether to allow metadata deletion of the given type.
* @param int $object_id ID object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
* @param bool $delete_all Whether to delete the matching metadata entries
* for all objects, ignoring specified $object_id.
* Default false.
*/
$check = apply_filters( "delete_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $delete_all );
if ( null !== $check ) {
return (bool) $check;
}
$_meta_value = $meta_value;
$meta_value = maybe_serialize( $meta_value );
$query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );
if (! $delete_all) {
$query .= $wpdb->prepare( " AND $type_column = %d", $object_id );
}
if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
$query .= $wpdb->prepare( ' AND meta_value = %s', $meta_value );
}
$meta_ids = $wpdb->get_col( $query );
if ( ! count( $meta_ids ) ) {
return false;
}
if ($ delete_all) {
if ( '' !== $meta_value && null !== $meta_value && false !== $meta_value ) {
$object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s AND meta_value = %s", $meta_key, $meta_value ) );
} else {
$object_ids = $wpdb->get_col( $wpdb->prepare( "SELECT $type_column FROM $table WHERE meta_key = %s", $meta_key ) );
}
}
/**
* Fires immediately before deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, або будь-який інший тип with an associated meta table).
*
* Possible hook names include:
*
* - `delete_post_meta`
* - `delete_comment_meta`
* - `delete_term_meta`
* - `delete_user_meta`
*
* @ Since 3.1.0
*
* @param string[] $meta_ids На array of metadata entry IDs to delete.
* @param int $object_id ID object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $_meta_value Metadata value.
*/
do_action( "delete_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value);
// Old-style action.
if ( 'post' === $meta_type ) {
/**
* Fires immediately before deleting metadata for a post.
*
* @ Since 2.9.0
*
* @param string[] $meta_ids На array of metadata entry IDs to delete.
*/
do_action( 'delete_postmeta', $meta_ids );
}
$query = "DELETE FROM $table WHERE $id_column IN( " . implode( ',', $meta_ids ) . ' )';
$count = $wpdb->query($query);
if (! $count) {
return false;
}
if ($ delete_all) {
$data = (array) $object_ids;
} else {
$ data = array ($ object_id);
}
wp_cache_delete_multiple( $data, $meta_type . '_meta' );
/**
* Fires immediately after deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
* (post, comment, term, user, або будь-який інший тип with an associated meta table).
*
* Possible hook names include:
*
* - `deleted_post_meta`
* - `deleted_comment_meta`
* - `deleted_term_meta`
* - `deleted_user_meta`
*
* @ Since 2.9.0
*
* @param string[] $meta_ids На array of metadata entry IDs to delete.
* @param int $object_id ID object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $_meta_value Metadata value.
*/
do_action( "deleted_{$meta_type}_meta", $meta_ids, $object_id, $meta_key, $_meta_value );
// Old-style action.
if ( 'post' === $meta_type ) {
/**
* Fires immediately after deleting metadata for a post.
*
* @ Since 2.9.0
*
* @param string[] $meta_ids На array of metadata entry IDs to delete.
*/
do_action( 'deleted_postmeta', $meta_ids );
}
return true;
} Зв’язані функції