Как создать собственную таблицу в WordPress без плагинов

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

Почему стоит создавать собственную таблицу в WordPress

Создание отдельной таблицы полезно, когда необходимо хранить структурированные данные, которые:

  • Не подходят под стандартные записи WordPress;
  • Требуют сложных связей и индексов для быстрого поиска;
  • Имеют большой объем и частое обновление данных;
  • Необходимо обеспечить гибкость в структуре и типах данных.

Например, если вы разрабатываете систему рейтингов, логирование действий пользователей или каталог с уникальными атрибутами — собственная таблица будет оптимальным решением.

Создание таблицы с помощью функции wpset_create_custom_table()

Для создания таблицы в базе данных WordPress нужно использовать класс wpdb и специальные функции для безопасного выполнения SQL-запросов. Также важно применять функцию dbDelta(), которая позволяет создавать или обновлять структуру таблицы без потери данных.

Ниже пример функции, создающей таблицу с именем wp_wpset_custom_data:

function wpset_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpset_custom_data';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id bigint(20) NOT NULL,
        data_value text NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY  (id),
        KEY user_id_idx (user_id)
    ) $charset_collate;";

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

// Вызов функции при активации плагина или темы
register_activation_hook(__FILE__, 'wpset_create_custom_table');

Объяснения по коду:

  • $wpdb->prefix — префикс таблиц WordPress, обычно wp_;
  • Таблица содержит поля id, user_id, data_value и created_at;
  • PRIMARY KEY и индекс по user_id для ускорения запросов;
  • dbDelta() безопасно создает или обновляет таблицу.

Добавление данных в собственную таблицу

Для вставки данных используем метод insert объекта $wpdb. Вот пример функции для добавления записи:

function wpset_insert_custom_data($user_id, $data_value) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpset_custom_data';

    $result = $wpdb->insert(
        $table_name,
        array(
            'user_id' => $user_id,
            'data_value' => $data_value,
            'created_at' => current_time('mysql')
        ),
        array('%d', '%s', '%s')
    );

    return $result !== false;
}

Здесь:

  • Первый массив — ключи и значения для вставки;
  • Второй массив описывает типы данных (%d — целое число, %s — строка);
  • Функция возвращает true, если вставка прошла успешно.

Чтение и обновление данных в таблице

Чтение данных

Для получения данных используйте метод get_results:

function wpset_get_custom_data_by_user($user_id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpset_custom_data';

    $query = $wpdb->prepare("SELECT * FROM $table_name WHERE user_id = %d ORDER BY created_at DESC", $user_id);

    return $wpdb->get_results($query);
}

Функция возвращает массив объектов с данными пользователя.

Обновление данных

Для обновления записи по ID:

function wpset_update_custom_data($id, $new_data_value) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpset_custom_data';

    $result = $wpdb->update(
        $table_name,
        array('data_value' => $new_data_value),
        array('id' => $id),
        array('%s'),
        array('%d')
    );

    return $result !== false;
}

Обновление происходит по уникальному идентификатору записи.

Удаление записей из собственной таблицы

Для удаления используйте метод delete:

function wpset_delete_custom_data($id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpset_custom_data';

    $result = $wpdb->delete($table_name, array('id' => $id), array('%d'));

    return $result !== false;
}

Удаление по ID гарантирует, что удалится ровно одна запись.

Советы по работе с собственной таблицей в WordPress

Важно учитывать несколько моментов для надежной и производительной работы:

  • Всегда используйте $wpdb->prepare() при формировании запросов, чтобы избежать SQL-инъекций.
  • Индексируйте поля, которые часто участвуют в условиях WHERE — это ускорит выборки.
  • Используйте транзакции или блокировки, если предполагается одновременный доступ к таблице с записью и чтением.
  • При обновлении структуры таблицы применяйте функцию dbDelta(), чтобы избежать потери данных.
  • Регулярно делайте резервные копии базы данных, особенно если управляете таблицами вручную.

Пример использования собственной таблицы в плагине

В реальном плагине можно организовать работу так:

  • При активации — создаём таблицу;
  • Создаём функции для CRUD (создание, чтение, обновление, удаление);
  • Добавляем интерфейс в админку для управления данными;
  • Используем AJAX для динамического обновления без перезагрузки страницы.

Такой подход позволит расширить функциональность WordPress без лишних плагинов и с максимальной производительностью.

Автоматическое удаление нерабочих вариаций товаров в WooCommerce
24.04.2026
Как использовать REST API для создания и обновления записей в WordPress
16.03.2026
WooCommerce: автоматическое удаление заблокированных и неактивных пользователей
18.05.2026
Как автоматически удалять старые записи в WordPress
03.04.2026
Как удалить неиспользуемые таксономии в WordPress без плагинов
06.01.2026