从静态方法运行数据库CREATE TABLE查询时发出

时间:2019-04-26 作者:Sean D

我怀疑我调用下面的表创建函数的方式是没有创建表的罪魁祸首(调试日志或查询数组中没有显示任何内容)。有人能看出我的错误吗?

// main plugin file, frequentVisitorCoupons.php
require \'vendor/autoload.php\';

// the first argument points to this file because I think
// autoload automatically loads the Utilities class here
register_activation_hook(plugin_dir_url(__FILE__) . \'frequentVisitorCoupons.php\',
 \'Utilities::createTablesIfNotExists\');


// classes/utilities.php
<?php    
class Utilities {
  public static function createTablesIfNotExists() {
    global $wpdb;

    $createCouponTableQuery = "CREATE TABLE IF NOT EXISTS {$wpdb->prefix}frequentVisitorCoupons_coupons (
    couponId MEDIUMINT NOT NULL AUTO_INCREMENT UNIQUE,
    PRIMARY KEY  (couponId),
    totalHits MEDIUMINT NOT NULL,
    isText BOOLEAN NOT NULL,
    imageUrl TEXT(1000)
    )";

    <2 more table create queries removed>

    require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
    dbDelta($createCouponTableQuery);

    var_dump($wpdb->queries);
    echo <<<\'EOD\'
    =====$wpdb->queries=====
EOD;
  }
}

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

plugin_dir_url() 返回URL 插件的目录路径,因此无法按预期工作(不会调用该函数):

register_activation_hook(plugin_dir_url(__FILE__) . \'frequentVisitorCoupons.php\',
 \'Utilities::createTablesIfNotExists\');
你应该使用plugin_dir_path() 它返回插件的文件系统目录路径(例如。/var/www/public/<user>/wp-content/plugins/your-plugin/).

但是如果代码在主插件文件中,那么您可以简单地使用__FILE__:

register_activation_hook(__FILE__, \'Utilities::createTablesIfNotExists\');
插件主文件示例:

<?php
/*
 * Plugin Name: My Plugin
 */

require_once \'path/to/classes/utilities.php\';

// Installs the tables on plugin activation.
register_activation_hook( __FILE__, \'Utilities::createTablesIfNotExists\' );

相关推荐

无法获取Function.php代码以删除实时站点上丢失的密码链接

从我的live站点中删除丢失的密码文本时遇到问题。出于某种原因,在彻底检查了几乎所有内容后(我想我一定错过了什么),文本仍在显示。我把它放在一个儿童主题中,并测试了儿童主题是“带来阅读”,它确实是。很奇怪。更改了PHP版本等,所有内容都是最新的,仍然显示。但在我的本地和现场测试站点上,它正在按需要删除。对于可能导致问题的原因,如有任何帮助,我们将不胜感激。function remove_lostpassword_text ( $text ) { if ($text == \'Lo