Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Wordpress通过插件创建表格_Php_Mysql_Wordpress - Fatal编程技术网

Php Wordpress通过插件创建表格

Php Wordpress通过插件创建表格,php,mysql,wordpress,Php,Mysql,Wordpress,如何通过激活插件创建表(如果不存在)? 注:插件工作良好,若表存在,但我需要创建表,若不存在 我尝试的是: function alicelf_bookmark() { global $wpdb; $table_name = $wpdb->prefix . "alice_user_bookmarks"; $charset_collate = ''; if ( ! empty( $wpdb->charset ) ) $charset_co

如何通过激活插件创建表(如果不存在)? 注:插件工作良好,若表存在,但我需要创建表,若不存在 我尝试的是:

function alicelf_bookmark() {
    global $wpdb;
    $table_name = $wpdb->prefix . "alice_user_bookmarks";
    $charset_collate = '';

    if ( ! empty( $wpdb->charset ) )
        $charset_collate = "DEFAULT CHARACTER SET {$wpdb->charset}";

    if ( ! empty( $wpdb->collate ) )
        $charset_collate .= " COLLATE {$wpdb->collate}";

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id INT NOT NULL AUTO_INCREMENT,
        user_id INT,
        name VARCHAR(255),
        shipping_address VARCHAR(255),
        user_notes TEXT,
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
    //some other plugin stuff..
}
add_action('wp_footer', 'alicelf_bookmark');

也许我使用了错误的操作?

找到了解决方案:只需注册激活并更改wp\u head而不是wp\u footer

add_action('wp_head', 'alicelf_bookmark');

//also move away your activation and sql create table  to another func for escape some errors 
//when you enable plugin and table exists
function activator_bookmark(){
//do code
}

register_activation_hook(FILE,'activator_bookmark');

找到解决方案:只需注册激活并更改wp_头而不是wp_尾

add_action('wp_head', 'alicelf_bookmark');

//also move away your activation and sql create table  to another func for escape some errors 
//when you enable plugin and table exists
function activator_bookmark(){
//do code
}

register_activation_hook(FILE,'activator_bookmark');

当你的插件需要它自己的表时,你需要考虑到这个表会随着时间的推移而改变。您知道它在第一次安装时会发生变化(从零到您的第一个版本)。稍后,当用户更新插件时,它可以更改

一个很好的方法是在选项表中存储一个数据库版本号,并检查它是否已更新。如果选项表中的版本号与插件中的版本号不匹配,则需要安装

这就引出了插件应该如何处理表结构中的更改。一个简单的方法可能包括大量的if测试和自定义altertable查询(当从1.0升级到3.0时,不一定需要从1.0升级到3.0的查询)。这可能会很难很快解决

通常最好将ALTERTABLE语句留给WordPress自己的dbDelta函数,它将生成您需要的语句

<?php
$prefix_table_name = $wpdb->prefix . 'prefix_table_name';
$prefix_db_version = '1.0';
$prefix_db_installed_version = get_option( 'prefix_db_version' );

/**
 * Create or update tables if needed.
 */
function prefix_install_db() {
    global $wpdb;

    if ( $prefix_db_installed_version == $prefix_db_version )
        return; // Database is current version, no need to do anything

    // We'll need dbDelta()
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

    $sql = "CREATE TABLE " . $prefix_table_name . " (
        ID bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        email varchar(320) NOT NULL,
        PRIMARY KEY  ID(ID)
    );";
    dbDelta( $sql );

    update_option( 'prefix_db_version' , $prefix_db_version );
}
add_action( 'plugins_loaded', 'prefix_install_db' );

当你的插件需要它自己的表时,你需要考虑到这个表会随着时间的推移而改变。您知道它在第一次安装时会发生变化(从零到您的第一个版本)。稍后,当用户更新插件时,它可以更改

一个很好的方法是在选项表中存储一个数据库版本号,并检查它是否已更新。如果选项表中的版本号与插件中的版本号不匹配,则需要安装

这就引出了插件应该如何处理表结构中的更改。一个简单的方法可能包括大量的if测试和自定义altertable查询(当从1.0升级到3.0时,不一定需要从1.0升级到3.0的查询)。这可能会很难很快解决

通常最好将ALTERTABLE语句留给WordPress自己的dbDelta函数,它将生成您需要的语句

<?php
$prefix_table_name = $wpdb->prefix . 'prefix_table_name';
$prefix_db_version = '1.0';
$prefix_db_installed_version = get_option( 'prefix_db_version' );

/**
 * Create or update tables if needed.
 */
function prefix_install_db() {
    global $wpdb;

    if ( $prefix_db_installed_version == $prefix_db_version )
        return; // Database is current version, no need to do anything

    // We'll need dbDelta()
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );

    $sql = "CREATE TABLE " . $prefix_table_name . " (
        ID bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        email varchar(320) NOT NULL,
        PRIMARY KEY  ID(ID)
    );";
    dbDelta( $sql );

    update_option( 'prefix_db_version' , $prefix_db_version );
}
add_action( 'plugins_loaded', 'prefix_install_db' );

Hmm我不考虑插件版本。谢谢你,我会更新我的代码。嗯,我不会考虑插件版本。谢谢你,我会更新我的代码。