Создание плагина: запись в базу данных

В предыдущих статьях

рассматриваются базовые понятия и приемы, используемые при создании плагинов WordPress. Следующий шаг - это сделать так, чтобы плагин хранил все необходимые текстовые данные не внутри php-файла, а в базе данных. Это позволит добавлять новые данные, не изменяя файл(ы) плагина.

Хранение данных плагина в базе данных WordPress

Плагин может записывать в базу данных:

  • Настройки- то, что выбирает пользователь, когда устанавливает плагин. Такие данные обычно сохраняют с использованием механизма опций WordPress options mechanism.
  • Данные - информация, добавляемая в процессе работы плагина, которая обычно связана с отдельными записями, категориями и т.д.. Данные можно хранить в отдельной таблице базы данных MySQL, которую нужно для этого создать. Также можно хранить данные как метаданные записей, так называемые пользовательские поля (Custom Fields) (WordPress' Post Meta).

Обычно плагин автоматически создает таблицу в базе данных MySQL для хранения данных (это должно происходить во время установки плагина, или пользователь может выполнить соответствующий SQL-запрос в phpMyAdmin).
Для того чтобы автоматически создавать и обновлять таблицу базы данных:

  • Нужна PHP-функция, которая создает таблицу базы данных.
  • Нужна PHP-функция обновления на случай, если для новой версии плагина потребуется таблица базы данных с другой структурой.
  • WordPress должен вызывать эти функции при активации/обновлении плагина.

Создание таблицы базы данных

Итак, пишем функцию с именем tbl_install, которая создает таблицу базы данных.
Префикс таблицы базы данных
В файле wp-config.php владелец сайта WordPress может определить префикс базы данных WordPress  (по умолчанию это wp_). Применяемое значение префикса хранится в переменной $wpdb->prefix. (В WordPress до версии 2.1 это значение хранилось в переменной $table_prefix).
Сначала задаем имя таблицы базы данных с именем tblname:

function tbl_install () {
global $wpdb;
$table_name = $wpdb->prefix . "tblname";

Попытка найти таблицу с именем $table_name с помощью SQL-запроса SHOW TABLES (проверяем существование такой таблицы):

if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {

Если этой таблицы еще нет, ее нужно создать.
Создать таблицу можно с помощью прямого SQL-запроса или с помощью функции dbDelta
из файла wp-admin/includes/upgrade.php (этот файл нужно загрузить, т.к. по умолчанию он не загружается). Функция  dbDelta сравнивает текущую структуру таблицы с требуемой структурой и добавляет или изменяет эту структуру, поэтому она используется для обновлений.  (Примеры использования функции dbDelta можно посмотреть в файле wp-admin/upgrade-schema.php).
При использовании функции dbDelta имейте в виду, что

  • Каждое поле в SQL-выражении должно располагаться на отдельной строке.
  • Между словами PRIMARY KEY и определением первичного ключа должно быть два пробела
  • Нужно использовать ключевое слово KEY, а не его синоним INDEX, и должен быть задан, по крайней мере, один ключ KEY.

Итак, создание или обновление таблицы:

$sql = "CREATE TABLE " . $table_name . " (
             id mediumint(9) NOT NULL AUTO_INCREMENT,
             time bigint(11) DEFAULT '0' NOT NULL,
             name tinytext NOT NULL COLLATE utf8_general_ci,
             text text NOT NULL COLLATE utf8_general_ci,
             url VARCHAR(55) NOT NULL COLLATE utf8_general_ci,
             UNIQUE KEY id (id)
          );";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);

Будет создана такая таблица:

Таблица базы данных

В этой таблице для плагина, который добавляет в заданное место на странице случайно выбранную фразу, можно хранить фразы (text), а также время добавления и имена пользователей, которые добавили фразы.
Типы данных:
MEDIUMINT - целые числа от -8 388 608 до 8 388 607
BIGINT - целые числа от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
TINYTEXT - не более 255 символов
TEXT - не более 65 535 символов
VARCHAR - не более 255 символов.
(в скобках указывается заявленное максимальное количество символов)

Модификаторы:
NOT NULL - поле должно быть явно инициализировано, т.е. не может содержать неопределенное значение
AUTO_INCREMENT - при добавлении в таблицу новой записи значение этого поля будет автоматически увеличиваться на 1
DEFAULT - задает значение, используемое по умолчанию, когда значение явно не задано
COLLATE utf8_general_ci - задает сравнение (или сопоставление, collation)
UNIQUE KEY - уникальный ключ
***
Продолжение следует ...

Опубликовано в рубрике Создание плагина |

5 комментариев на «Создание плагина: запись в базу данных»

  1. samsim говорит:

    Все очень внятно изложено. Мне очень понравился Ваш сайт. Жду новых постов.

  2. Музыкальный магазин говорит:

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

    • Admin говорит:

      Музыкальный ...? похож...

      • Art говорит:

        Да это все спамеры гнусные, у них любой сайт на них похож, лишь бы ссылку вставить.

        Мне же интересно - почему никогда не делается проверка на ошибки? Например, на пустой рекордсет?
        И почему нет примеров работы с другой базой, не основной? Иногда, имхо - логичней хранить базу рядом, а не пихать все в одну общую.

  3. Витос говорит:

    Сделал все по инструкции, все получилось, залил на сайт и вылезла одна маленькая ошибка: в шапке сайта в виде логотипа стоит кнопка главной страницы, так вот после указанных действий эта кнопка сделалась не просто логотипом на общем фоне, а визуально выделенным блоком, логотип на белом фоне, залил все назад — ошибка пропала
    можешь подскажете в чем проблема?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *