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?
dbDelta
is defined inwp-admin/includes/upgrade.php
file and used for updates/upgrades so it is not guaranteed that the file is always loaded and you have to require it to make sure.require_once
does just fine as it will not load the file more than once..