add_metadata() WP 2.9.0

Додає мета дані до будь-якого об’єкта (запис, коментар, користувач).

Це базова функція для керування метаданими. На її основі працюють усі інші функції метаполів. Також можна створити довільну таблицю в БД та з її допомогою записувати/видаляти дані звідти (див. нижче).

Споріднені функції

update_metadata( $meta_type, $object_id, $meta_key, $meta_value, [$prev_value] )
// можна використовувати замість `add_metadata()`,
// Оскільки спочатку перевіряє існування ключа.
delete_metadata( $meta_type, $object_id, $meta_key, [$meta_value], [$delete_all] )
// Видаляє дані по ключу.
get_metadata( $meta_type, $object_id, [$meta_key], [$single] )
// Отримує дані з БД, за ключом.

Обов’язково дивіться також: Метадані у WordPress

Повертає

int|false.

  • true – операція з додавання поля пройшла вдало
  • false – поле додати не вдалося

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

add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique );
$meta_type
(рядок) (обов’язковий)

Тип об’єкта, мета дані для якого потрібно додати. Може бути:

  • comment
  • post
  • user
  • term
$object_id
(число) (обов’язковий)
ID об’єкта, мета дані для якого додаються.
$meta_key
(рядок) (обов’язковий)
Ключ – назва типу додаткових даних.
$meta_value
(рядок) (обов’язковий)
Значення ключа додаткових даних.
$unique
(логічний)

Визначення унікальності ключа.

  • false– означає, що цього об’єкта може бути визначено кілька однакових ключів.
  • true– отже, що ключ цього об’єкта може лише один, тобто. якщо такий ключ вже існує, то функція не додасть жодних даних.

Типово: false

Приклади

0

#1 Приклад створення додаткових даних для коментарів 45

add_metadata( 'comment', 45, 'vocation', 'Будівельник', true );
0

#2 Створення довільної таблиці метаданих

Створювати такі таблиці може знадобиться розробникам плагінів. Створення відбувається на етапі активації плагіна через функцію register_activation_hook(). Потрібно розуміти, що такі таблиці можуть створюватися й іншими плагінами, тому робіть перевірку існування таких.

Приклад створення таблиці метаданих: term :

Global $wpdb;
$result = false;
//Створюємо таблицю в БД, якщо її немає
$sql = sprintf(
	'CREATE TABLE IF NOT EXISTS `%stermmeta` (
	  meta_id bigint(20) UNSIGNED NOT NULL auto_increment,
	  term_id bigint(20) UNSIGNED NOT NULL,
	  meta_key varchar(255),
	  meta_value longtext,
	  PRIMARY KEY (meta_id)
	)',
	$wpdb->prefix
);

$result = $wpdb->query( $sql );

Нотатка! Після того, як таблиця створена, її потрібно зареєструвати в об’єкті $wpdb , щоб потім простіше було з нею працювати через клас $wpdb .

Для реєстрації визначте властивість класу $wpdb->termmeta, в якому вкажіть назву таблиці (робити це потрібно якомога раніше – перед використанням довільних функцій):

Global $wpdb;
$wpdb->termmeta = $wpdb->prefix.'termmeta';
0

#3 Додавання даних до таблиці Term

Тепер, коли таблицю створено, додати дані туди можна так:

add_metadata( 'term', $_GET['tag_ID'], 'gender', 'M', true);
add_metadata( 'term', $_GET['tag_ID'], 'age', '29', true );
add_metadata( 'term', $_GET['tag_ID'], 'favourite_colour', 'Green', true );

нотатки

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

список змін

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

Код add_metadata() WP 6.0.2

function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique = false ) {
	Global $wpdb;

	if ( ! $meta_type || ! $meta_key || ! is_numeric( $object_id ) ) {
		return false;
	}

	$object_id = absint($object_id);
	if (! $object_id) {
		return false;
	}

	$table = _get_meta_table( $meta_type );
	if (! $table) {
		return false;
	}

	$meta_subtype = get_object_subtype( $meta_type, $object_id );

	$column = sanitize_key( $meta_type . '_id' );

	// expected_slashed ($meta_key)
	$meta_key = wp_unslash( $meta_key );
	$meta_value = wp_unslash( $meta_value );
	$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type, $meta_subtype );

	/**
	 * Short-circuits adding 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:
	 *
	 * - `add_post_metadata`
	 * - `add_comment_metadata`
	 * - `add_term_metadata`
	 * - `add_user_metadata`
	 *
	 * @ Since 3.1.0
	 *
	 * @param null|bool $check Whether до allow adding metadata for 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 $unique Whether the specified meta key should be unique for the object.
	 */
	$check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );
	if ( null !== $check ) {
		return $check;
	}

	if ( $unique && $wpdb->get_var(
		$wpdb->prepare(
			"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
			$meta_key,
			$object_id
		)
	) ) {
		return false;
	}

	$_meta_value = $meta_value;
	$meta_value = maybe_serialize( $meta_value );

	/**
	 * Fires immediately before meta of a specific typ is added.
	 *
	 * 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:
	 *
	 * - `add_post_meta`
	 * - `add_comment_meta`
	 * - `add_term_meta`
	 * - `add_user_meta`
	 *
	 * @ Since 3.1.0
	 *
	 * @param int $object_id ID object metadata is for.
	 * @param string $meta_key Metadata key.
	 * @param mixed $_meta_value Metadata value.
	 */
	do_action( "add_{$meta_type}_meta", $object_id, $meta_key, $_meta_value);

	$result = $wpdb->insert(
		$table,
		array(
			$column => $object_id,
			'meta_key' => $meta_key,
			'meta_value' => $meta_value,
		)
	);

	if ( ! $result ) {
		return false;
	}

	$mid = (int) $wpdb->insert_id;

	wp_cache_delete( $object_id, $meta_type . '_meta' );

	/**
	 * Fires immediately after meta of specific type is added.
	 *
	 * 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:
	 *
	 * - `added_post_meta`
	 * - `added_comment_meta`
	 * - `added_term_meta`
	 * - `added_user_meta`
	 *
	 * @ Since 2.9.0
	 *
	 * @param int $mid Мета ID після успішного оновлення.
	 * @param int $object_id ID object metadata is for.
	 * @param string $meta_key Metadata key.
	 * @param mixed $_meta_value Metadata value.
	 */
	do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );

	return $ mid;
}

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

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