WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Рекомендуемые продукты со скидкой от Template Monster

add_metadata() WP 2.9.0

Добавляет мета данные к любому объекту (запись, комментарий, пользователь).

Это базовая функция для управления метаданными. На ее основе работают все остальные функции метаполей. Также можно создать произвольную таблицу в БД и с её помощью записывать/удалять данные оттуда (см. ниже).

Читайте также: Метаданные в WordPress

Родственные функции

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] )
// получает данные из БД, по ключу.

Таблицы метаданных в Базе Данных WP

Эта функция подразумевает существование нужных таблиц в БД, таблиц куда метаданные будут записываться. По умолчанию в WordPress существует 4 таблицы для разных объектов (записи, комментарии, пользователи, элементы таксономии):

wp_commentmeta
Метаданные для каждого комментария.
wp_postmeta
Метаданные для постов. Сюда записываются привычные в WordPress "произвольные поля поста"
wp_usermeta
Дополнительные данные о пользователе.
wp_termmeta
Дополнительные данные для элементов таксономии. С версии WP 4.4.
Является основой для: add_comment_meta(), add_term_meta(), add_user_meta(), add_post_meta()
Возвращает

false / true, в зависимости от того удалось ли добавить метаданные.

Использование

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

Примеры

#1. Пример создания дополнительных данных для комментария 45

add_metadata( 'comment', 45, 'vocation', 'Строитель', true );

#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';

#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-includes/meta.php WP 5.2.3

<?php
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 );

	/**
	 * Filters whether to add metadata of a specific type.
	 *
	 * The dynamic portion of the hook, `$meta_type`, refers to the meta
	 * object type (comment, post, term, or user). Returning a non-null value
	 * will effectively short-circuit the function.
	 *
	 * @since 3.1.0
	 *
	 * @param null|bool $check      Whether to allow adding metadata for the given type.
	 * @param int       $object_id  Object ID.
	 * @param string    $meta_key   Meta key.
	 * @param mixed     $meta_value Meta value. Must be serializable if non-scalar.
	 * @param bool      $unique     Whether the specified meta key should be unique
	 *                              for the object. Optional. Default false.
	 */
	$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 type is added.
	 *
	 * The dynamic portion of the hook, `$meta_type`, refers to the meta
	 * object type (comment, post, term, or user).
	 *
	 * @since 3.1.0
	 *
	 * @param int    $object_id   Object ID.
	 * @param string $meta_key    Meta key.
	 * @param mixed  $_meta_value Meta 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 a specific type is added.
	 *
	 * The dynamic portion of the hook, `$meta_type`, refers to the meta
	 * object type (comment, post, term, or user).
	 *
	 * @since 2.9.0
	 *
	 * @param int    $mid         The meta ID after successful update.
	 * @param int    $object_id   Object ID.
	 * @param string $meta_key    Meta key.
	 * @param mixed  $_meta_value Meta value.
	 */
	do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );

	return $mid;
}

Cвязанные функции

Из метки: metadata (метаданные)

Еще из раздела: Метаданные

Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться