插件:注册去激活钩子工作得很好,而注册激活钩子突然停止工作

时间:2018-05-30 作者:Chad Denaux

有趣的是,我将主插件文件移动到插件目录中的一个文件夹中。在register\\u activation\\u hook工作正常之前,它现在不工作了;然而,register\\u deactivation\\u钩子仍然可以很好地工作,并且当前正在从同一文件中调用它。我还尝试为激活挂钩明确定义路径,而不是仅仅依赖__FILE__ 关键字。如果能提供任何关于插件不再调用Activation的见解,我们将不胜感激,谢谢。

//define paths
$skirmish_table_name = $wpdb->prefix . \'skirmishes\';

function skirmish_create_db() {
  global $wpdb;
  $charset_collate = $wpdb->get_charset_collate();
  require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );

  //* Create thetable
  global $skirmish_table_name;
  $sql = "CREATE TABLE $skirmish_table_name (
  skirmish_id INTEGER NOT NULL AUTO_INCREMENT,
  skirmish_SID TEXT NOT NULL,
  skirmish_name TEXT NOT NULL,
  skirmish_visibility TEXT NOT NULL,
  skirmish_public_tries TEXT NOT NULL,
  PRIMARY KEY (skirmish_id)
  ) $charset_collate;";
   dbDelta( $sql );
  }
  register_activation_hook(__FILE__, \'skirmish_create_db\' );
是代码的基本结构。

事实证明,我将插件恢复为其原始格式,并且仍然没有生成表。我尝试停用之前激活的所有插件,但似乎仍然有什么东西干扰了插件在mysql数据库中创建表的能力。如果能深入了解为什么会发生这种情况,我们将不胜感激。

我已尝试检查所有各种日志,但无法确定发生了什么。我不知道为什么这突然不起作用,而以前它工作得很好。要么激活挂钩出了问题,要么服务器出于某种原因拒绝/删除了创建表请求。。。。

1 个回复
最合适的回答,由SO网友:Chad Denaux 整理而成

所以我找到了问题所在,或者至少在某种程度上,它涉及到全局关键字的调用。这在其他上下文/函数中效果很好,但出于某种原因(我仍然不清楚为什么),dbDelta不喜欢它。我可以在其他不使用dbDelta的函数(例如基本查询)中使用它,但是是的,这。。。。所以无论如何,如果有人最终处理了dbDelta问题,那么,希望这可以为其他人节省一些时间。。。。

结束