我为我的插件创建了第一个表,在添加了更多功能后,我意识到我需要为其他类型的数据添加第二个表。
到目前为止,故障排除工作解决了dbDelta()不使用相同的sql数据变量名的问题,将dbDelta()作为组合的sql var($setup_sql .= '...'
而不是$setup_sql = '...'
)运行,并将代码作为一个简单的函数而不是一个类运行。
我甚至尝试使用不同的名称运行单个表创建,只是为了检查代码是否正常工作,而仍然没有创建另一个表。
我已经没有错误运行所有这些测试,并且出于所有意图和目的,Wordpress似乎不允许插件创建多个表 - 但我知道这不是情况下。
class activation_setup {
public static function wpd_activate() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$wpd_table_trig = $wpdb->prefix . 'wpd_triggers';
$setup_sql_trig = "CREATE TABLE $wpd_table_trig (
id int(11 ) NOT NULL AUTO_INCREMENT,
trigger varchar(255) DEFAULT NULL,
popup varchar(255) DEFAULT NULL,
notify varchar(255) DEFAULT NULL,
UNIQUE KEY id (id)
) $charset_collate;";
dbDelta( $setup_sql_trig );
$wpd_table_sel = $wpdb->prefix . 'wpd_selections';
$setup_sql_sel = "CREATE TABLE $wpd_table_sel (
id int(11 ) NOT NULL AUTO_INCREMENT,
selected varchar(255) DEFAULT NULL,
session varchar(255) DEFAULT NULL,
ip varchar(255) DEFAULT NULL,
page varchar(255) DEFAULT NULL,
date varchar(255) DEFAULT NULL,
UNIQUE KEY id (id)
) $charset_collate;";
dbDelta( $setup_sql_sel );
update_option('wpd_activated',true);
}
}
$activation_setup = new activation_setup();
register_activation_hook( __FILE__ , array( $activation_setup, 'wpd_activate' ) );
我绝对不会试图解决为什么这段代码不会添加第二个表,即使在删除重复的表代码并使用不同的表名运行它之后。
我已经通过大量的博客文章和Stack答案试图找到它的底部。
任何帮助都会很棒。
答案 0 :(得分:1)
问题与表定义有关。
您已在表定义中编写trigger
,它也是mysql的关键字
那就是问题
这个改变可以解决你的问题
使用"`"在写字段名称时。
class activation_setup {
public static function wpd_activate() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
$wpd_table_trig = $wpdb->prefix . 'wpd_triggers';
$setup_sql_trig = "CREATE TABLE $wpd_table_trig (
`id` int(11 ) NOT NULL AUTO_INCREMENT,
`trigger` varchar(255) DEFAULT NULL,
`popup` varchar(255) DEFAULT NULL,
`notify` varchar(255) DEFAULT NULL,
UNIQUE KEY id (id)
) $charset_collate;";
dbDelta( $setup_sql_trig );
$wpd_table_sel = $wpdb->prefix . 'wpd_selections';
$setup_sql_sel = "CREATE TABLE $wpd_table_sel (
`id` int(11 ) NOT NULL AUTO_INCREMENT,
`selected` varchar(255) DEFAULT NULL,
`session` varchar(255) DEFAULT NULL,
`ip` varchar(255) DEFAULT NULL,
`page` varchar(255) DEFAULT NULL,
`date` varchar(255) DEFAULT NULL,
UNIQUE KEY id (id)
) $charset_collate;";
dbDelta( $setup_sql_sel );
}
}
$activation_setup = new activation_setup();
register_activation_hook( __FILE__ , array( $activation_setup, 'wpd_activate' ) );
如果您想确保问题与该触发器相关,请删除"`"从触发器字段然后再次激活插件。