Пользовательские таблицы базы данных в WordPress: часть первая

Опубликовано: 2022-06-27

В этой серии статей мы рассмотрим, как мы можем создавать пользовательские таблицы базы данных в WordPress с помощью плагина или без него.

Когда и почему следует использовать настраиваемые таблицы базы данных?

В большинстве случаев таблицы базы данных WordPress по умолчанию, которые создаются при установке WordPress, — это все, что вам когда-либо понадобится. Эти таблицы содержат всевозможную информацию, такую ​​как типы сообщений и связанные с ними метаданные. Итак, зачем вам нужна пользовательская таблица базы данных?

Они вступают в свои права, когда вы работаете с данными, которые выходят за рамки обычной информации, используемой в WordPress. Таким образом, вы можете захотеть поместить данные в настраиваемую таблицу при создании плагина, которому необходимо хранить информацию в базе данных. Именно по этой причине вы увидите, что такие плагины, как WooCommerce, имеют свои собственные настраиваемые таблицы.

Разместите свой сайт с Pressidium

60- ДНЕВНАЯ ГАРАНТИЯ ВОЗВРАТА ДЕНЕГ

ПОСМОТРЕТЬ НАШИ ПЛАНЫ

Помимо того, что это более аккуратный способ хранения информации, использование отдельных таблиц может помочь повысить производительность, поскольку любые используемые запросы не должны выполнять поиск в строках и строках ненужных данных. Вместо этого их можно направить к «правильной» таблице, где они смогут быстрее и эффективнее найти необходимую информацию. Это становится очень важным, когда таблицы базы данных начинают расти.

Создание пользовательской таблицы базы данных WordPress

Допустим, мы хотим создать простой плагин, который поможет нам организовать список студентов. На самом деле такая простая задача означает, что нам вообще не нужно использовать пользовательские таблицы. Пользовательский тип сообщения отлично справится с этой задачей.

Однако для этого примера такие данные идеально подходят для демонстрации теории, лежащей в основе пользовательских таблиц, поэтому мы будем работать с ними. Примечание. Мы предполагаем, что у вас есть базовые знания PHP и MySQL.

Начиная

Для начала мы создадим таблицу базы данных «студент» со столбцами для имени, возраста, электронной почты и уникального идентификатора. Мы собираемся сделать это, создав собственный плагин для выполнения этой работы.

ПРИМЕЧАНИЕ. Если вы еще не знакомы с тем, как создать настраиваемый плагин, ознакомьтесь с нашим руководством по созданию собственного настраиваемого плагина WordPress, прежде чем возобновить работу с этим руководством!

Создайте файлы плагина

Мы создадим папку с именем «my-custom-db-tables» в папке плагинов и внутри нее файл с именем «my-custom-db-tables.php», который содержит этот фрагмент кода:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { // THE CODE } register_activation_hook(__FILE__, 'create_the_custom_table');

Что мы сделали, так это ввели информацию о плагине, чтобы WordPress распознал плагин. Очевидно, вам также понадобится функция, которая добавляет схему таблицы в базу данных, которая будет функцией create_the_custom_table() .

В большинстве случаев вам нужно запустить эту функцию только один раз, в идеале, когда плагин активирован. Поэтому мы использовали функцию register_activation_hook(), которую предоставляет WordPress, чтобы убедиться, что функция запускается после активации плагина.

Определить структуру таблицы

Конечно, если мы активируем плагин, ничего еще не произойдет, так как функция все еще пуста. Итак, давайте заполним его этим кодом, чтобы создать таблицу:

 <?php /* Plugin Name: My Custom DB Tables Description: A plugin for registering my students Author: Tassos Antoniou */ function create_the_custom_table() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $table_name = $wpdb->prefix . 'students'; $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__, 'create_the_custom_table');

Теперь давайте просто остановимся на мгновение, чтобы изучить, что мы сделали с этим фрагментом кода.

Прежде всего, мы получаем префикс таблицы, используя глобальный класс WordPress $wpdb , который взаимодействует с базой данных. Это тот же префикс, который определен в файле wp-config.php , и его также рекомендуется использовать в вашей пользовательской таблице. Мы также унаследуем текущую сортировку, сохранив ее в переменной $charset_collate , чтобы установить ее позже в запросе.

Наш следующий шаг — определить структуру таблицы в sql-запросе, чтобы правильно получить желаемую схему. Как мы уже говорили, столбец идентификатора, электронной почты, имени и возраста с правильным типом данных для каждого.

 $sql = "CREATE TABLE " . $table_name . " ( id int(11) NOT NULL AUTO_INCREMENT, name tinytext NOT NULL, email VARCHAR(100) NOT NULL, age int(11) NULL, PRIMARY KEY (id) ) $charset_collate;";

Далее нам upgrade.php require_once Это обязательно для использования функции dbDelta , которая идет сразу после. В WordPress для создания таблицы базы данных (или обновления существующих таблиц до новой структуры) нам нужно использовать функцию dbDelta.

ПРИМЕЧАНИЕ. Вместо прямого выполнения SQL-запроса эта функция используется для изменения базы данных путем создания или обновления таблицы на основе указанных операторов SQL. Используя его параметр $queries , мы можем передать схему нашей пользовательской таблицы.

Теперь, если вы активируете плагин и проверите свою базу данных, вы должны увидеть, что таблица создана.

Теперь, если вы прочтете файл wp-admin/includes/upgrade.php , вы заметите, что dbDelta() использует preg_match() для извлечения информации из оператора SQL. Из-за этого вам нужно быть осторожным при редактировании. Официальная документация содержит больше информации об этом, но мы выделили ключевые моменты ниже:

  • Вы должны поместить каждое поле в отдельную строку в своем операторе SQL.
  • У вас должно быть два пробела между словами PRIMARY KEY и определением вашего первичного ключа.
  • Вы должны использовать ключевое слово KEY , а не его синоним INDEX, и вы должны включить хотя бы один KEY.
  • После KEY должен следовать один пробел , затем имя ключа, затем пробел, затем открывающая скобка с именем поля, затем закрывающая скобка.
  • Другим KEY, кроме основного, должно быть присвоено имя. Например:
 ... PRIMARY KEY (id), KEY age (age) ...
  • Вы не должны использовать апострофы или обратные кавычки вокруг имен полей.
  • Типы полей должны быть все в нижнем регистре .
  • Ключевые слова SQL, такие как CREATE TABLE и UPDATE, должны быть в верхнем регистре .
  • Вы должны указать длину всех полей, которые принимают параметр длины, например, int(11) столбца id.

Вы также могли заметить, что мы не проверяли, существует ли уже таблица в базе данных. Это потому, что dbDelta делает это за нас. Не нужно беспокоиться о запросах на обновление. Он не только создаст таблицу, но и проверит, существует ли уже таблица с таким именем, и если да, то не создаст таблицу. Он будет обновлять существующую структуру таблицы только при необходимости.

Мы расскажем об этом подробнее в следующих статьях серии.

Функциональность и масштабируемость

Итак, что должно произойти, когда плагин деактивирован или удален? В идеале у администратора должна быть возможность выбирать, удалять ли эту таблицу из базы данных, если и когда плагин будет деактивирован или удален.

Кроме того, вы почти наверняка рано или поздно обнаружите, что вам нужно изменить свой плагин (чтобы улучшить его или сгладить ошибку). Возможно, вы захотите изменить способ хранения данных, добавить столбцы в таблицу или изменить ее дизайн. Это означает, что вы должны создавать плагин таким образом, чтобы он был максимально масштабируемым и мог адаптироваться к любым внесенным изменениям.

В наших следующих статьях этой серии мы углубимся в эти темы и покажем вам, как этого можно добиться. Зайдите в ближайшее время!