插件没有创建第二个表激活
问题描述:
我为我的插件创建了第一个表,并且在添加更多功能之后,我意识到我需要为其他类型的数据添加第二个表。插件没有创建第二个表激活
故障排除的努力到目前为止还没有使用相同的变量名称为SQL数据,运行dbDelta()都作为组合的SQL VAR(的$setup_sql .= '...'
代替$setup_sql = '...'
),并运行代码为解决与dbDelta(的问题)一个简单的功能,而不是一个班级。
我甚至试过用不同的名字运行一个表创建,只是为了检查代码的工作情况,而它仍然没有创建另一个表。
我已经有没有错误贯穿所有这些测试,并且出于所有意图和目的,似乎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'));
我会绝对坚果试图找出为什么这个代码不添加第二台,甚至剔除重复表的代码,并用不同的表名运行它之后。
我已经经历了大量的博客文章和堆栈的答案试图达到它的底部。
任何帮助将是太棒了。
答
问题与表定义。 你在表中定义了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'));
如果你想确保问题是从触发字段的触发然后删除“`”,然后再次激活插件。
**你的先生真是太棒了**我不能告诉你我已经经历了多少次这样的代码 - 还有无数其他的例子 - 一个一个数字,从来没有想过检查这样的实际名称。为我的Sql代码中不使用蜱做好准备。 – RalphTheWonderLlama