激活WP主题时未创建表格

时间:2013-06-07 作者:Arvind

这是我用来创建名为“prefix”+zillow-->的自定义表的代码,其中prefix是站点的wp表前缀。

register_activation_hook(__FILE__,\'CreateTable\');
下面给出了实际的函数——它检查这样一个表是否已经存在,以及为该表分配的版本号(以便我可以在该主题的更高版本中更新/更改该表)--

function CreateTable() {
  //Database table versions
  $zillow_db_table_version= "1.0";
  $table_name = $wpdb->prefix . "zillow";

  $installed_ver = get_option( "zillow_db_table_version" );
  //Check if the table already exists and if the table is up to date, if not create it
  if($wpdb->get_var("SHOW TABLES LIKE \'$table_name\'") != $table_name || $installed_ver != $zillow_db_table_version ) {
    $sql = "CREATE TABLE " . $table_name .
    " (propertyid varchar(20) NOT NULL ,
    inserted_on date,
    UNIQUE KEY id (id) );";
    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql);
    update_option( "zillow_db_table_version", $zillow_db_table_version );
  }
  //Add database table versions to options
  add_option("zillow_db_table_version", $zillow_db_table_version);

}
但根本没有创建表。以上代码有什么问题?我多次尝试使用上述代码激活主题(先激活另一个主题,然后激活这个主题),但没有创建任何表(我直接在WP数据库表列表中进行检查)。

1 个回复
SO网友:s_ha_dum

dbDelta is extremely picky. 看看你的代码,我认为你违反了这个规则:

您必须在SQL语句中将每个字段放在自己的行上

您的两个字段使用括号共享行。我没有测试过那种特殊的模式,但是dbDelta 非常挑剔。

我不知道之后的空间NOT NULL 这很重要。

我怀疑是否有必要检查表的存在。检查您的选项应该足够了。

最后,register_activation_hook 用于插件,而不是主题。据我所知,没有类似的专门主题激活挂钩。如果你在这个网站上搜索,有很多建议的解决方法。

结束

相关推荐

使用wp_list_table如何触发更新函数“inline”?

好的,我已经使用wp\\u list\\u table从自定义db表中读取数据,我希望能够通过单击相应的单元格来更新数据库表。默认值为0,单击时该值设置为1。因此,单击单元格updateVisitor()将触发“inline”我的函数不是Visitors extend WP\\u list\\u table类的一部分function updateVisitor($id){ global $wpdb; $query = $wpdb->prepare( \"UPDATE