delete_metadata_by_mid() WP 3.3.0

Видаляє з бази даних рядок метаданих по основному полю meta_id.

Це низькорівнева функція WordPress для роботи з таблицями метаданих, яка дозволяє видалити рядок метаданих за ID цього рядка. Зазвичай метадані записи/терміну/користувача видаляються за ID об’єкта і мета ключем: дивіться delete_metadata() .

Повертає

true|false. True у разі успішного видалення та false при провалі.

Використання

delete_metadata_by_mid( $meta_type, $meta_id );
$meta_type
(рядок) (обов’язковий)
Тип метаданих:
comment,
post,
term,
user.
$meta_id
(число) (обов’язковий)
ID рядки з метаданими.

Приклади

0

#1 Видалимо все метаданих у терміна (рубрики, мітки)

Цей код взятий з функції wp_delete_term() :

// Термін з ID = 15
$ term = 15;

// Отримуємо всі ID рядків, що містять метадані терміна
$term_meta_ids = $wpdb->get_col( $wpdb->prepare(
	"SELECT meta_id FROM $wpdb->termmeta WHERE term_id = %d ", $term
)));

// Видаляємо всі метадані терміни
foreach ( $term_meta_ids as $mid ) {
	delete_metadata_by_mid( 'term', $mid );
}

нотатки

  • Global. wpdb. $wpdb WordPress database abstraction object.

список змін

З версії 3.3.0Введено.

Код delete_metadata_by_mid() WP 6.0.2

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 specific type by meta ID.
	 *
	 * 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_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};

		/** Ця дія міститься в 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 metadata натисніть на 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' );

		/** Ця дія міститься в 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_ids Deleted metadata entry ID.
			 */
			do_action( "deleted_{$meta_type}meta", $meta_id );
		}

		return $result;

	}

	// Meta ID was not found.
	return false;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *