Crearea unui tabel într-un plugin personalizat la activarea acestuia

17 mar. 2016, 10:55:13
Vizualizări: 49.6K
Voturi: 9

Încerc să creez un plugin personalizat în care vreau să creez un tabel atunci când plugin-ul este activat. Am încercat următorul cod, dar nu creează tabelul în baza de date

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 );
}

// Înregistrează funcția pentru a fi executată la activarea plugin-ului
register_activation_hook( __FILE__, 'create_plugin_database_table' );
3
Comentarii

Ai un tutorial detaliat în Codex: https://codex.wordpress.org/Creating_Tables_with_Plugins

RRikesh RRikesh
17 mar. 2016 11:13:53

Am testat codul tău pe o instalație nouă, funcționează.

RRikesh RRikesh
17 mar. 2016 11:19:22

am instalat deja pluginul și am adăugat acest cod

Arun Kumaresh Arun Kumaresh
17 mar. 2016 11:23:43
Toate răspunsurile la întrebare 3
2
18

Trebuie să incluzi fișierul wpadmin/upgrade-functions.php pentru a crea o tabelă exemplu:

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

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

    #Verifică dacă tabela există deja, dacă nu, atunci creează-o

    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 mar. 2016 12:10:15
Comentarii

Te rog să-ți unifici conturile și să rămâi cu unul singur

Pieter Goosen Pieter Goosen
17 mar. 2016 14:19:08

În WordPress 2.1+ ar trebui să folosești $wpdb->prefix în loc de variabila globală $table_prefix.

Mateusz Mateusz
12 mar. 2020 06:17:27
0

Acest cod funcționează pentru mine:

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

Apoi în 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 mar. 2018 00:20:47
2
function astro_plugin_table_install() {
    global $wpdb;
    global $charset_collate;
    $table_name = $wpdb->prefix . 'pin';
     $sql = "CREATE TABLE IF NOT EXISTS $table_name (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `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 dec. 2017 16:02:39
Comentarii

Explică cum ajută codul postat utilizatorul, simpla postare a codului nu este de mare ajutor.

bravokeyl bravokeyl
31 dec. 2017 15:29:13

folosind instrucțiunea sql: ... IF NOT EXISTS este diferența acestui răspuns.

hamid araghi hamid araghi
24 sept. 2021 12:44:47