Взаємодія плагіна із базою даних WordPress. Частина 2

Взаємодія плагіна із базою даних WordPress. Частина 2

Продовжуємо цикл статей про роботу з базою даних у 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 — масив значень для підстановки

Дякую всім! На цьому все 🙂

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

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