首先,我要说的是,我知道还有其他关于这方面的帖子,并且有很多关于这个主题的文档,但这些资源都没有帮助我解决我的问题。
我是WordPress插件的初学者。这是我的第一次,所以我肯定我错过了一些简单的东西,但我所读到的一切都表明这应该是可行的。
插件激活没有问题,显示“我的菜单”,等等。但以下内容不会在数据库中创建新表。我删除了id之外的所有内容,只是为了看看它是否是SQL语法,但仍然没有结果。
register_activation_hook( __FILE__, \'pf_rb_install\' );
function pf_rb_install() {
global $wpdb;
$table_name = $wpdb->prefix . \'pf_parts\';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE \'$table_name\' (
id mediumint(9) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta( $sql );
}
提前感谢您的帮助。
最合适的回答,由SO网友:Dave Romsey 整理而成
以下是的更新版本pf_rb_install()
.
在表创建SQL中,$table_name
不应在引号中。引号应该触发一个错误,该错误将出现在PHP的error.log
文件此外,在PRIMARY KEY (id)
SQL语句的一部分。
register_activation_hook( __FILE__, \'pf_rb_install\' );
function pf_rb_install() {
global $wpdb;
$table_name = $wpdb->prefix . \'pf_parts\';
$pf_parts_db_version = \'1.0.0\';
$charset_collate = $wpdb->get_charset_collate();
if ( $wpdb->get_var( "SHOW TABLES LIKE \'{$table_name}\'" ) != $table_name ) {
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
dbDelta( $sql );
add_option( \'pf_parts_db_version\', $pf_parts_db_version );
}
}
该代码还添加了一个版本号,如果将来对数据库模式进行修改,该版本号将有所帮助。最后,添加了一个检查,以便仅当表不存在时才运行数据库创建代码。有关创建自定义表的更多信息,请参阅Codex文章
Creating Tables with Plugins.