Tabellenerstellung in WordPress
Für Plugin oder Themes werden oftmals Datenbank Anbindungen benötigt um beispielsweise Einstellungen für APIs oder Sonstiges zu hinterlegen. Dann findest du den Code für die Erstellung einer neuen Tabelle in der Datenbank als erstes Beispiel. Wir verwenden hierfür ein Plugin. Die Verbindung wird über $wpdb
mit den WordPress Datenbank Zugangsdaten hergestellt:
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' );
Das Plugin erzeugt bei Aktivierung eine 4 Spalten Tabelle. Diese sieht dann so aus:
Name `wp_plugin_table_name`
`id` int(11)
`account_name` varchar(255)
`account_type` int(11)
`transfer_state` varchar(255)
In den nachfolgenden Beispielen wird diese Tabelle als Ausgangspunkt verwendet.
Optionen mit WordPress DB
WordPress DB (kurz $wpdb
) bietet die gleiche Struktur an wie normales MySQL Script. Diese finden ebenfalls über $wpdb Verwendung in selber Komplexität. Standard Funktionen wie es SELECT
, INSERT
, UPDATE
und DELETE
sind behandeln wir zudem hier genauer.
WordPress Datenbank: SELECT
Die Ausgabe gibt also alle Accountnamen aus, welche die fiktive account_name
123aaa und account_type
= 1 besitzen.
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; } }
Genau genommen passiert die ganze Magie auf Zeile 3.
Etwa in diesem Query werden %-Variablen verwendet. Folglich steht %s
für String, eine Typenzuweisung als Platzhalter. %d
steht für eine Dezimalzahl, ebenfalls ein Platzhalter. Die Werte für die Abfrage werden am Ende der prepare
Funktion als Parameter angehängt.
WordPress Datenbank: INSERT
global $wpdb; $wpdb->insert( $wpdb->prefix . "plugin_table_name", array( "account_name" => "123aaa", "account_type" => 1, "transfer_state" => "transfered" ) );
Die erste Spalte id
in unserem Tabellenbeispiel, verfügt über einen PRIMARY
Key und der Option auto_increment
. Dies sorgt dafür, dass selbständig die Zahl der Datensätze hochgezählt wird.
WordPress Datenbank: 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') );
Dann zur Erklärung: Die zwei letzteren Arrays beinhalten Typendefinierungen. Das Erste der beiden Letzten mit drei Elementen gibt an, welche Daten in der Tabelle updated wird, in diesem Beispiel %s -> String
, %d -> Dezimalzahl
, %s -> String
. Das Letzte überprüft die Suchdaten (üblicherweise WHERE
) auf Typ des account_type
und transfer_state
.
WordPress Datenbank: DELETE
global $wpdb; $wpdb->delete($wpdb->prefix . 'plugin_table_name', array('account_typ' => 2));
Darum werden alle Datensätze welche account_typ
= 2 besitzen unwiderruflich gelöscht.
Kommentieren