给你,哈维尔,这应该管用。我在代码中加入了注释,试图告诉您需要更改的地方,并添加了一些您缺少的内容。下面我会解释更多。
<?php
/* Should really come up with something more unique and related to your plugin */
function yourplugin_dbcreation() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
/* Please come up with something more descriptive or unique for this */
$table_name = $wpdb->prefix . \'form\';
require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
/* Since you\'re not only running this on activation, let\'s do a quick check to see if it exists before we move further */
if( $wpdb->get_var( "SHOW TABLES LIKE \'$table_name\'" ) != $table_name ) {
/* dbDelta() has strict rules about how to format the SQL statement, field types must be lower case, do not put headings in backticks, etc. */
$sql = "CREATE TABLE $table_name (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
email varchar(255) NOT NULL,
UNIQUE KEY id (id),
PRIMARY KEY (id)
);";
dbDelta( $sql );
/* You add this next line in case you ever want to update the table structure, so you\'d run a version check to determine whether or not to execute the change. If your new version matches this option, you do nothing, if the option is lower than your new table version, you\'d run the code for the update. */
add_option( \'form_db\', \'1.0\' );
}
}
/* you could use this, but better to run it on activation with register_activation_hook( \'plugin_path\', \'your_function\' );*/
add_action( \'init\', \'yourplugin_dbcreation\' );
?>
因此,正如Jacob Peattie在他的评论中指出的那样,有一些细节需要处理,还有一些代码需要包含在他提供的链接中。
dbDelta()
这是一件非常具体和挑剔的事情,所以你必须确保遵守规则。它一点也不宽大,如果你不遵守它的严格指示,它就不会执行。
你还漏掉了几句关键的话,比如dbDelta()
本身——没有它,WP就不知道如何处理代码。
就个人而言,我更喜欢创建插件激活表,但你没有提供任何插件信息,你必须获得绝对正确的路径,否则它将无法工作。(Jacob的链接实际上向您展示了如何做到这一点。)
最后,在命名函数和表时,您必须更加独特和描述性。即使你个人不需要描述它们,至少要确保它们是唯一的,这样它们就不会像creation
或form
. 当你让它们像那样通用时,你所做的就是在你安装某个东西时引发冲突,而另一个开发人员也没有使他们的代码唯一化。然后突然有两个函数creation
而且两者都不起作用。如果你考虑到人们正在使用的教程和片段的数量,这一点也不罕见。
希望这些都能有所帮助。:-)