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

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

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

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

  • Хранить данные, не подходящие под структуру постов или метаданных.
  • Оптимизировать запросы за счет специализированной структуры.
  • Избежать засорения основных таблиц лишней информацией.

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

Как создать таблицу в базе данных WordPress

Для создания таблиц в WordPress принято использовать функцию dbDelta(). Она умеет создавать таблицы и безопасно обновлять их структуру при изменениях. Обычно таблицу создают при активации плагина.

Подключение к базе и создание таблицы

Для начала нужно получить доступ к глобальному объекту $wpdb, который управляет соединением с базой данных.

function wpcodex_create_custom_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpcodex_data'; // имя таблицы с префиксом
    $charset_collate = $wpdb->get_charset_collate();

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

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

register_activation_hook( __FILE__, 'wpcodex_create_custom_table' );

В этом примере создается таблица wp_wpcodex_data с полями для хранения ID, ID пользователя, текстового значения и даты создания. Обратите внимание, что мы используем $wpdb->prefix для поддержки любых префиксов таблиц, заданных в WordPress.

Вставка и чтение данных из собственной таблицы

После создания таблицы важно уметь работать с ней: вставлять, обновлять и получать данные.

Вставка данных

Для добавления записи в таблицу используйте метод insert из объекта $wpdb. Он автоматически экранирует данные и защищает от SQL-инъекций.

function wpcodex_insert_data( $user_id, $data_value ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpcodex_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;
}

Этот метод удобно использовать в функциях плагина или темы для записи пользовательских данных.

Получение данных

Для выборки данных используйте $wpdb->get_results(). Например, получить все записи для конкретного пользователя:

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

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

    return $results;
}

Вызов этой функции вернет массив объектов с данными.

Обновление и удаление записей

Не менее важны операции обновления и удаления данных. Для этого в $wpdb есть методы update и delete.

Обновление записи

function wpcodex_update_data_value( $id, $new_value ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpcodex_data';

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

    return $result !== false;
}

Удаление записи

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

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

    return $result !== false;
}

Использование собственной таблицы в плагинах и темах

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

Например, если вы разрабатываете плагин для сбора пользовательских отзывов, вы можете хранить их в собственной таблице, а затем выводить отзывы на странице с помощью шорткода:

function wpcodex_reviews_shortcode() {
    $user_id = get_current_user_id();
    $reviews = wpcodex_get_data_by_user( $user_id );
    if ( empty( $reviews ) ) {
        return '<p>Отзывов пока нет.</p>';
    }

    $output = '<ul>';
    foreach ( $reviews as $review ) {
        $output .= '<li>' . esc_html( $review->data_value ) . ' — ' . esc_html( $review->created_at ) . '</li>';
    }
    $output .= '</ul>';

    return $output;
}
add_shortcode( 'wpcodex_reviews', 'wpcodex_reviews_shortcode' );

Это простой пример, который показывает, как можно использовать свои таблицы для расширения функционала WordPress.

Резюме и рекомендации

При работе с собственными таблицами стоит учитывать следующие моменты:

  • Всегда используйте dbDelta() для создания и обновления таблиц, чтобы не потерять данные при изменениях структуры.
  • Обязательно применяйте $wpdb->prepare() и методы вставки/обновления для безопасности.
  • Соблюдайте префиксы таблиц, чтобы избежать конфликтов с другими плагинами и безопасно работать в мультисайтах.
  • Планируйте структуру таблицы с учетом индексов для оптимизации запросов.
  • Для больших объемов данных подумайте о кешировании и пагинации при выводе.

Создание собственной таблицы — мощный инструмент, позволяющий расширять возможности WordPress и создавать уникальные решения под любые задачи.

Как автоматически отправлять отзывы WordPress на email с примером кода
20.03.2026
Как добавить собственную таблицу в базу данных WordPress с примером кода
01.12.2025
Как создать автоматический импорт данных из Google Sheets в WordPress
14.01.2026
Как удалить пустые мета данные в WordPress для оптимизации базы данных
17.03.2026
Как создать собственный REST API в WordPress
13.11.2025