Як створити таблицю у БД WordPress

Як створити таблицю у БД WordPress

Створення власної таблиці для CMS WordPress може знадобитися у таких випадках:

  1. Під час розробки власного плагіна
  2. Під час створення власної теми (продаж або оренда нерухомості, авто тощо)

У своїх проєктах для створення таблиць або імпорту даних у БД я використовую WP-функцію «dbDelta» у хукy «register_activation_hook()». Приклад коду:

register_activation_hook(__FILE__, function()
{
	global $wpdb;
	
	require_once(ABSPATH.'wp-admin/includes/upgrade.php');

	dbDelta("CREATE TABLE IF NOT EXISTS `{$wpdb -> prefix}my_table` (
		`id` INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
		`title` VARCHAR(255) NOT NULL,
		`date_create` INT(10) UNSIGNED NOT NULL
	) {$wpdb -> get_charset_collate()};");	
});

Наведений вище код потрібно розмістити в головному файлі вашого плагіна. Інакше він не буде працювати (принаймні, у мене не спрацьовувало).
Тут усе досить просто:

  1. На всякий випадок підключаємо файл з потрібним набором функцій «upgrade.php»
  2. Використовуємо глобальну змінну «$wpdb» для отримання поточного префіксу БД та поточного кодування за допомогою «$wpdb->get_charset_collate()»

Другий спосіб створення таблиць базується на використанні функції «$wpdb->query()» і виглядає так:

register_activation_hook(__FILE__, function()
{
global $wpdb;

$wpdb -> query("CREATE TABLE IF NOT EXISTS `{$wpdb -> prefix}my_table` (
`id` INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL,
`date_create` INT(10) UNSIGNED NOT NULL
) {$wpdb -> get_charset_collate()};");
});

За дивним збігом обставин про другий спосіб я дізнався пізніше. Хоча можу з упевненістю сказати, що пробував і його ще на початку вивчення WordPress — тоді він у мене не працював.
А тепер працює — диво 🙂

Увага. Усі наведені вище приклади працюють лише для плагінів. І не спрацьовують під час ініціалізації теми.

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

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

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

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