Fatal error: Call to undefined function dbDelta()

I want to create a table during the activation of the plugin, so I used the code as follows:

class Database
{
    private $db_version = '1.0', $table_prefix;

    public function __construct()
    {
        global $wpdb;
        $this->table_prefix = $wpdb->prefix;
        register_activation_hook( PLUGIN_INDEX_FILE, array($this, 'dbSetup') );
    }

    public function dbSetup()
    {
        $countriesSQL = "CREATE TABLE $this->table_prefix . countries (
            id int(11) UNSIGNED NOT NULL,
            country_code varchar(2) NOT NULL DEFAULT '',
            country_name varchar(100) NOT NULL DEFAULT '',
            PRIMARY KEY  (id)
        ) $charset_collate;";
        dbDelta( $countriesSQL );
    }
}

But during the activation of plugin, it throws the fatal error as,

Fatal error: Call to undefined function dbDelta() in
wp-content/plugins/myPlugin/libraries/Database.class.php on line 26

In some forums, some are suggesting to use,
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
before the function call.

It is working. But I just wanted to know, if it is this the right approach? How to use the dbDelta in the correct manner to make it work?

1 Answer
1

You answered your own question. You need to include the upgrade.php file which contains that function. Otherwise won’t be loaded on your plugin update and the function won’t exist.

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

Leave a Comment