Описание
Добавляет мета (дополнительные) данные к любому объекту (запись, комментарий, пользователь).
Эта функция является своего рода API для управления метаданными. Так как, для нее можно создать произвольную таблицу в БД и записывать/удалять данные от туда (см. ниже).
Родственные функции:
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])
— получает данные из БД, по ключу.
add_metadata() используется в: add_post_meta().
Функция возвращает false / true, в зависимости от того удалось ли добавить метаданные.
Использование
<?php add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique ); ?>
Параметры
- $meta_type (строка) (обязательный)
- Тип объекта, мета данные для которого нужно добавить. Может быть: comment, post или user (всегда в единственном числе).
По умолчанию: нет - $object_id (число) (обязательный)
- ID объекта, мета данные для которого добавляются.
По умолчанию: нет - $meta_key (строка) (обязательный)
- Ключ - название типа дополнительных данных.
По умолчанию: нет - $meta_value (строка) (обязательный)
- Значение ключа дополнительных данных.
По умолчанию: нет - $unique (логический)
- Определение уникальности ключа.
false - означает, что для этого объекта может быть определено несколько одинаковых ключей.
true - значит, что ключ для этого объхекта может быть только один, т.е. если такой ключ уже существует, то функция не добавит никаких данных.
По умолчанию: false
Таблицы метаданных в Базе Данных WP
add_metadata() подразумевает существование нужных таблиц в БД, таблиц куда метаданные будут записываться. По умолчанию в WordPress существует 3 такие таблицы для разных объектов (записи, комментарии и пользователи):
- wp_commentmeta
- Метаданные для каждого комментария.
- wp_postmeta
- Метаданные для постов. Сюда записываются привычные в WordPress "произвольные поля поста"
- wp_usermeta
- Дополнительные данные о пользователе.
Создание произвольных таблиц в БД
Если нужно записывать какие-либо другие данные (для других объектов), то можно создать свою таблицу и пользоваться add_metadata() и производными ей функциями (update_metadata(), delete_metadata(), get_metadata()), для созданной таблицы.
Структура создаваемой таблицы:
- meta_id
- bigint(20) UNSIGNED NOT NULL auto_increment
- object_id
- Название поля будет [название_объекта]_id. bigint(20) UNSIGNED NOT NULL
- meta_key
- varchar(255)
- meta_value
- longtext
Примеры
1. Пример создания дополнительных данных для комментария 45:
<?php 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 в котором укажите название таблицы (делать это нужно через хук init или перед использованием произвольных функций):
global $wpdb; $wpdb->termmeta = $wpdb->prefix.'termmeta';
Добавление данных в таблицу 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);
add_metadata()
из файла: /wp-includes/meta.php WP 3.3.2function add_metadata($meta_type, $object_id, $meta_key, $meta_value, $unique = false) {
if ( !$meta_type || !$meta_key )
return false;
if ( !$object_id = absint($object_id) )
return false;
if ( ! $table = _get_meta_table($meta_type) )
return false;
global $wpdb;
$column = esc_sql($meta_type . '_id');
// expected_slashed ($meta_key)
$meta_key = stripslashes($meta_key);
$meta_value = stripslashes_deep($meta_value);
$meta_value = sanitize_meta( $meta_key, $meta_value, $meta_type );
$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 );
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');
do_action( "added_{$meta_type}_meta", $mid, $object_id, $meta_key, $_meta_value );
return $mid;
}Связанные Функции
Ещё из раздела
Смотрите также: Функции WordPress и Теги Шаблона.
Надоело зависеть от администраторов управляющих хостингом, вы можете настроить сервер лучше под свои нужды? Тогда вам стоит обратить внимание на VPS хостинг. VPS переводится как - виртуальный личный сервер (Virtual Private Server) и поэтому на нем вы сможете делать что угодно и настраивать сервер как вам вздумается.