Продовжуємо цикл статей про роботу з базою даних у WordPress. Сьогодні ми поговоримо про створення, оновлення, видалення та отримання даних з БД. Звертаю вашу увагу, що ми працюватимемо не з системною таблицею WordPress, а зі своєю власною.
Дамп цієї таблиці наведений нижче:
CREATE TABLE IF NOT EXISTS `wp_plance_text_shortcodes` ( `sh_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `sh_title` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL, `sh_code` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL, `sh_description` text COLLATE utf8mb4_unicode_ci NOT NULL, `sh_is_lock` tinyint(1) unsigned NOT NULL, `sh_date_create` int(10) unsigned NOT NULL, PRIMARY KEY (`sh_id`) ) ENGINE=InnoDB;
Таку структуру наразі має таблиця мого плагіна «My Text Shortcodes»
Додавання даних
Для збереження даних у свою таблицю WordPress я зазвичай використовую такий метод:
$wpdb -> insert(
$wpdb -> prefix.'plance_text_shortcodes',
array(
'sh_title' => $data_ar['sh_title'],
'sh_code' => $data_ar['sh_code'],
'sh_description' => $data_ar['sh_description'],
'sh_is_lock' => $data_ar['sh_is_lock'],
'sh_date_create' => time(),
),
array('%s', '%s', '%s', '%d', '%s')
);
Розберемо детальніше. Перше, що ви повинні зробити (те, чого немає у прикладі вище) — оголосити глобальну змінну `$wpdb`. Без неї, як ви розумієте, з БД WordPress працювати не вийде. На початку методу додайте такий код:
global $wpdb;
Таким чином ми «вмикаємо» в область видимості функції або методу об'єкт `$wpdb`.
Функція `insert` має такий вигляд:
insert( $table, $data, $format = null )
де:
$table — назва таблиці, в яку вставляються дані
$data — масив полів і значень
$format — масив форматів (%s — строка, %d — число) для екранування значень
У нашому випадку:
$wpdb -> prefix.'plance_text_shortcodes',
де:
`$wpdb -> prefix` — префікс таблиць
`plance_text_shortcodes` — назва таблиці
Масив значень:
array( 'sh_title' => $data_ar['sh_title'], 'sh_code' => $data_ar['sh_code'], 'sh_description' => $data_ar['sh_description'], 'sh_is_lock' => $data_ar['sh_is_lock'], 'sh_date_create' => time(), ),
Масив форматів:
array('%s', '%s', '%s', '%d', '%s')
Цікаво, що `time()` тут зазначено як `%s` (рядок), хоча це число — можливо, WP обрізав значення.
Оновлення даних
Не повірите 🙂 але це майже те ж саме:
update( $table, $data, $where, $format = null, $where_format = null )
де:
$table — таблиця для оновлення
$data — масив значень
$where — масив умов
$format — формат значень
$where_format — формат умов
Приклад:
$wpdb -> update(
$wpdb -> prefix.'plance_text_shortcodes',
array(
'sh_title' => $data_ar['sh_title'],
'sh_code' => $data_ar['sh_code'],
'sh_description' => $data_ar['sh_description'],
'sh_is_lock' => $data_ar['sh_is_lock'],
),
array('sh_id' => $sh_id),
array('%s', '%s', '%s', '%d'),
array('%d')
);
Тут ми оновлюємо запис по `sh_id`.
Видалення даних
Для видалення даних використовується:
delete( $table, $where, $where_format = null )
Приклад:
$wpdb -> delete(
$wpdb -> prefix.'plance_text_shortcodes',
array('sh_id' => $sh_id),
array('%d')
);
або:
$wpdb -> query("DELETE FROM `{$wpdb -> prefix}plance_text_shortcodes` WHERE `sh_id` = ".intval($sh_id));
Отримання даних
Використовується метод:
get_results( $query = null, $output = OBJECT )
де:
$output — формат результату:
- OBJECT (об’єкт)
- ARRAY_A (асоціативний масив)
- ARRAY_N (числовий масив)
Для одного значення:
get_var( $query = null, $x = 0, $y = 0 )
Для одного запису:
get_row( $query = null, $output = OBJECT, $y = 0 )
Для однієї колонки по всіх записах:
get_col( $query = null , $x = 0 )
Підготовлені запити
Якщо `insert` чи `update` не підходять — можна використовувати:
$wpdb->query( $wpdb->prepare(
"INSERT INTO {$wpdb -> prefix}plance_text_shortcodes "
. "(sh_title, sh_code, sh_description, sh_is_lock, sh_date_create) "
. "VALUES "
. "(%s, %s, %s, %d, %s )",
array(
$data_ar['sh_title'],
$data_ar['sh_code'],
$data_ar['sh_description'],
$data_ar['sh_is_lock'],
time()
)
));
Формат:
prepare( $query, $args )
де:
- $query — SQL-запит
- $args — масив значень для підстановки
Дякую всім! На цьому все 🙂
