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

17 мар. 2016 г., 10:55:13
Просмотры: 49.6K
Голосов: 9

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

function create_plugin_database_table() {
 global $wpdb;
 $table_name = $wpdb->prefix . 'sandbox';
 $sql = "CREATE TABLE $table_name (
 id mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
 title varchar(50) NOT NULL,
 structure longtext NOT NULL,
 author longtext NOT NULL,
 PRIMARY KEY  (id)
 );";

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

register_activation_hook( __FILE__, 'create_plugin_database_table' );
3
Комментарии

У вас есть подробное руководство в Кодексе: https://codex.wordpress.org/Creating_Tables_with_Plugins

RRikesh RRikesh
17 мар. 2016 г. 11:13:53

Проверил ваш код на чистой установке, он работает.

RRikesh RRikesh
17 мар. 2016 г. 11:19:22

я уже установил плагин и добавил этот код

Arun Kumaresh Arun Kumaresh
17 мар. 2016 г. 11:23:43
Все ответы на вопрос 3
2
18

Чтобы создать таблицу, необходимо подключить файл wpadmin/upgrade-functions.php. Пример:

function create_plugin_database_table()
{
    global $table_prefix, $wpdb;

    $tblname = 'pin';
    $wp_track_table = $table_prefix . "$tblname ";

    #Проверяем, существует ли таблица. Если нет — создаем её

    if($wpdb->get_var( "show tables like '$wp_track_table'" ) != $wp_track_table) 
    {

        $sql = "CREATE TABLE `". $wp_track_table . "` ( ";
        $sql .= "  `id`  int(11)   NOT NULL auto_increment, ";
        $sql .= "  `pincode`  int(128)   NOT NULL, ";
        $sql .= "  PRIMARY KEY `order_id` (`id`) "; 
        $sql .= ") ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ";
        require_once( ABSPATH . '/wp-admin/includes/upgrade.php' );
        dbDelta($sql);
    }
}

 register_activation_hook( __FILE__, 'create_plugin_database_table' );
17 мар. 2016 г. 12:10:15
Комментарии

Пожалуйста, объедините ваши аккаунты и придерживайтесь одного

Pieter Goosen Pieter Goosen
17 мар. 2016 г. 14:19:08

В WordPress 2.1+ вам нужно использовать $wpdb->prefix вместо глобальной переменной $table_prefix.

Mateusz Mateusz
12 мар. 2020 г. 06:17:27
0

Этот код работает у меня:

function installer(){
    include('installer.php');
}
register_activation_hook(__file__, 'installer');

Затем installer.php :

global $wpdb;
$table_name = $wpdb->prefix . "my_products";
$my_products_db_version = '1.0.0';
$charset_collate = $wpdb->get_charset_collate();

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

    $sql = "CREATE TABLE $table_name (
            ID mediumint(9) NOT NULL AUTO_INCREMENT,
            `product-model` text NOT NULL,
            `product-name` text NOT NULL,
            `product-description` int(9) NOT NULL,
            PRIMARY KEY  (ID)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
    add_option('my_db_version', $my_products_db_version);
}
15 мар. 2018 г. 00:20:47
2
// Функция для создания таблицы плагина при активации
function astro_plugin_table_install() {
    global $wpdb;
    global $charset_collate;
    $table_name = $wpdb->prefix . 'pin'; // Формируем имя таблицы с префиксом WordPress
    // SQL-запрос для создания таблицы, если она не существует
    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
      `id` bigint(20) NOT NULL AUTO_INCREMENT, // Уникальный ID записи
      `pincode` bignit(128) DEFAULT NOT NULL,   // Поле для хранения пин-кода
       PRIMARY KEY (`id`)                       // Устанавливаем первичный ключ
    )$charset_collate;";
    
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql ); // Создаем или обновляем таблицу
}
// Регистрируем функцию создания таблицы при активации плагина
register_activation_hook(__FILE__,'astro_plugin_table_install');
28 дек. 2017 г. 16:02:39
Комментарии

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

bravokeyl bravokeyl
31 дек. 2017 г. 15:29:13

используя SQL-запрос: ... IF NOT EXISTS — это ключевое отличие данного ответа.

hamid araghi hamid araghi
24 сент. 2021 г. 12:44:47