Функція add_metadata()
При розробці сайту виникає потреба додати мета (додаткові) дані до будь-якого об’єкту (запис, коментар, користувач).
Ця функція є свого роду 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_user_meta (), add_post_meta ().
Функція повертає false / true, залежно від того чи вдалося додати метадані.
Використання
1 |
<? 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:
1 |
<? php add_metadata ('comment', 45, 'vocation', 'Будівельник', true)?> |
2. Створення довільної таблиці метаданих.
Створювати такі таблиці може знадобиться розробникам плагінів. Створення відбувається на етапі активації плагіна, через функцію register_activation_hook (). Потрібно розуміти, що подібні таблиці можуть створюватися й іншими плагінами, тому робіть перевірку на існування таких.
Приклад створення таблиці метаданих: term:
1 2 3 4 5 6 7 8 9 10 11 |
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 або перед використанням довільних функцій):
1 2 |
global $ wpdb; $ Wpdb-> termmeta = $ wpdb-> prefix.'termmeta '; |
Додавання даних в таблицю Term
Тепер, коли таблиця створена, додати дані туди можна так:
1 2 3 |
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); |