Table creation in WordPress
For plugins or themes often database connections are needed to store settings for APIs or other things. Below you will find the code for creating a new table in the database. We use a plugin for this. The connection is made via $wpdb
with the WordPress database credentials:
function create_plugin_database_tables( ) { global $wpdb, $table_prefix; require_once( ABSPATH . '/wp-admin/includes/upgrade.php' ); $new_table = $table_prefix . "plugin_table_name"; if( $wpdb->get_var( "show tables like '$new_table'" ) != $new_table ) { $sql = "CREATE TABLE `" . $new_table . "` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account_name` varchar(255) NOT NULL, `account_type` int(11) NOT NULL, `transfer_state` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; "; dbDelta($sql); } } register_activation_hook( __FILE__, 'create_plugin_database_tables' );
The plugin creates a 4 column table when activated. This then looks like this:
Name `wp_plugin_table_name`
`id` int(11)
`account_name` varchar(255)
`account_type` int(11)
`transfer_state` varchar(255)
In the following examples, this table is used as a starting point.
Options with WordPress DB
WordPress DB (short $wpdb
) offers the same structure as normal MySQL Script. These are also used via $wpdb
in the same complexity. Standard functions like SELECT
, INSERT
, UPDATE
and DELETE
are covered here in more detail.
WordPress database: SELECT
The output shows all account names which have the fictitious account_name
= 123aaa and account_type
= 1.
global $wpdb; $session_id = "123aaa"; $dbquery = $wpdb->prepare( "SELECT * FROM ".$wpdb->prefix."plugin_table_name WHERE account_name = %s AND account_type = %d", $session_id, 1 ); $db_entries = $wpdb->get_results( $dbquery ); if(count( $db_entries ) != 0 ) { foreach( $db_entries as $src_entry ) { $account_name = $src_entry->account_name; return $account_name; } }
Strictly speaking, all the magic happens on line 3.
In this query, %
variables are used. %s
stands for string, a type assignment as a placeholder. %d
stands for decimal number, also a placeholder. The values for the query are appended as parameters at the end of the prepare function.
WordPress database: INSERT
global $wpdb; $wpdb->insert( $wpdb->prefix . "plugin_table_name", array( "account_name" => "123aaa", "account_type" => 1, "transfer_state" => "transfered" ) );
The first column id
in our table example has a PRIMARY
key and the option auto_increment
. This ensures that the number of records is incremented automatically.
WordPress database: UPDATE
$wpdb->update( $wpdb->prefix . 'plugin_table_name', array( 'account_name' => "124abb", 'account_type' => 2, 'transfer_state' => "finished", ), array('account_type' => 1, 'transfer_state' => "tranfered"), array('%s', '%d', '%s'), array('%d', '%s') );
The last two arrays contain type definitions. First of the last two with three elements specifies which data in the table is updated, in this example %s -> string
, %d -> decimal number
, %s -> string
. The last one checks the search data (usually WHERE
) for type of account_type
and transfer_state
.
WordPress database: DELETE
global $wpdb; $wpdb->delete($wpdb->prefix . 'plugin_table_name', array('account_typ' => 2));
All records which have account_type
= 2 will be deleted irrevocably.
Add comment