The maybe_create_table() WordPress PHP function checks if a table exists in the database and creates it if not already present.
Usage
require_once ABSPATH . 'wp-admin/includes/upgrade.php'; global $wpdb; $table_name = 'custom_table'; $create_ddl = 'CREATE TABLE ' . $table_name . ' (...);'; maybe_create_table($wpdb->prefix . $table_name, $create_ddl);
Parameters
$table_name
(string) – Required. The name of the database table.$create_ddl
(string) – Required. The SQL statement to create the table.
More information
See WordPress Developer Resources: maybe_create_table
Important: Before calling this function, you must manually include ‘upgrade.php’ to avoid the white screen of death:
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
Examples
Create a simple table for storing user preferences
This code creates a table named ‘user_preferences’ with three columns: user_id, preference_key, and preference_value.
require_once ABSPATH . 'wp-admin/includes/upgrade.php'; global $wpdb; $table_name = 'user_preferences'; $create_ddl = "CREATE TABLE " . $table_name . " ( user_id bigint(20) unsigned NOT NULL, preference_key varchar(255) NOT NULL, preference_value varchar(255) NOT NULL, PRIMARY KEY (user_id, preference_key) );"; maybe_create_table($wpdb->prefix . $table_name, $create_ddl);
Create a table for storing custom post metadata
This code creates a table named ‘custom_post_meta’ with four columns: meta_id, post_id, meta_key, and meta_value.
require_once ABSPATH . 'wp-admin/includes/upgrade.php'; global $wpdb; $table_name = 'custom_post_meta'; $create_ddl = "CREATE TABLE " . $table_name . " ( meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, post_id bigint(20) unsigned NOT NULL, meta_key varchar(255) DEFAULT NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) );"; maybe_create_table($wpdb->prefix . $table_name, $create_ddl);
Create a table for storing product inventory
This code creates a table named ‘product_inventory’ with four columns: product_id, location_id, quantity, and last_updated.
require_once ABSPATH . 'wp-admin/includes/upgrade.php'; global $wpdb; $table_name = 'product_inventory'; $create_ddl = "CREATE TABLE " . $table_name . " ( product_id bigint(20) unsigned NOT NULL, location_id bigint(20) unsigned NOT NULL, quantity int(11) NOT NULL, last_updated datetime NOT NULL, PRIMARY KEY (product_id, location_id) );"; maybe_create_table($wpdb->prefix . $table_name, $create_ddl);
Create a table for storing user achievements
This code creates a table named ‘user_achievements’ with three columns: achievement_id, user_id, and date_achieved.
require_once ABSPATH . 'wp-admin/includes/upgrade.php'; global $wpdb; $table_name = 'user_achievements'; $create_ddl = "CREATE TABLE " . $table_name . " ( achievement_id bigint(20) unsigned NOT NULL, user