这是我完整的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');
?>
当我激活插件时,它总是尝试创建表并插入数据。我怎么能这样做,只是在第一个插件激活?
谢谢。
答案 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);