WP Custom插件:创建表并插入一次数据。

时间:2011-05-29 17:00:41

标签: php plugins wordpress-plugin wordpress

这是我完整的Wordpress插件文件:

<?php
function wp_create_table_install()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $sql = 'CREATE TABLE '.$table_name.'(
        id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(75)
    );';

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

function wp_create_table_insert_data()
{
    global $wpdb;

    $table_name = $wpdb->prefix.'createtable';
    $id = 1;
    $name = 'WP Create Table!';

    $wpdb->insert($table_name, array('id' => $id, 'name' => $name));
}

register_activation_hook(__FILE__, 'wp_create_table_install');
register_activation_hook(__FILE__, 'wp_create_table_insert_data');
?>

当我激活插件时,它总是尝试创建表并插入数据。我怎么能这样做,只是在第一个插件激活?

谢谢。

3 个答案:

答案 0 :(得分:1)

更快捷的方法是在CREATE语句中添加[IF NOT EXISTS],这样如果您的表已经存在,就不会出现错误。

答案 1 :(得分:0)

在运行CREATE TABLE之前,您可以查询information_schema.tables以查看该表是否已存在。

答案 2 :(得分:0)

不幸的是,没有办法在“安装”上运行 - 令人惊讶的是,WordPress没有为安装提供任何挂钩而不是激活!

人们应对此问题的方法是设置和测试一个选项 - 如果未设置该选项,则创建表,如果设置了表,则不执行任何操作或执行数据库升级。读入和缓存选项,这样就没有性能损失。

$opt = get_option(MYPLUGIN_OPTIONS);

$opt['dbversion'] = 100;
...
update_option(MYPLUGIN_OPTIONS, $opt);