Table of Contents

Wordpress Datenbank Tabelle erzeugen bei Plugin-Aktivierung

Man sollte das in zwei Files aufteilen:

  1. in der Hauptfile des plugins mein_plugin.php den Hook einbauen, der getriggert wird bei Plugin Aktivierung
  2. in eine zweite File den Code um in der Datenbank eine Tabelle zu erzeugen

Hook/Action in der Plugin-Hauptfile

Wenn euer Plugin mein-plugin heißt, heißt in diesem Beispiel die Mainfile auch mein-plugin.php. Dort am Besten den register_activation_hook-Hook hinein schreiben:

/* --------------------------------------------------------
 * PLUGIN AKTIVIERUNG
 * --------------------------------------------------------
 *
 * Funktionen die ausgeführt werden sollen, wenn das Plugin
 * aktiviert wird. z.B. Datenbanken erstellen oder ähnliches.
 *
 */
register_activation_hook( __FILE__, function(){
	/* Hier Code der bei Aktivierung ausgeführt werden sollen */
 
	require_once 'PluginActivator.php'; // <- das ist die zweite File mit dem Datenbank Code im gleichen Folder
	PluginActivator::activate();
} );

Achtung: dieser Hook wird nur ausgeführt beim aktivieren des Plugins, danach nicht mehr. Erst dann wieder, wenn das Plugin deaktiviert und wieder reaktivier wurde.

Zweite File mit Datenbank Code

In unserem Beispiel heißt die File PluginActivator.php und wird required mit Hook beim Aktivieren des Plugins.

<?php
/* --------------------------------------------------------
 * DB Installs bei Plugin Aktivierung
 * --------------------------------------------------------
 *
 * Die Tabellen die das Plugin in der DB braucht werden
 * hier erzeugt
 *
 *
 *
 */
 
class PluginActivator {
 
	/**
	 * Short Description. (use period)
	 *
	 * Long Description.
	 */
	public static function activate() {
		self::create_custom_db_table();
	}
 
 
 
	/**
	 * Erzeugt eine Tabelle bei Plugin-Aktivierung
	 */
	public static function create_custom_db_table()
	{
		global $wpdb;
		if ( ! function_exists('dbDelta') ) {
            require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
        }
 
		$table_name      = $wpdb->prefix . "meine_neue_tabelle"; 
		$charset_collate = $wpdb->get_charset_collate();
 
		$sql = "CREATE TABLE $table_name (
			id mediumint(9) NOT NULL AUTO_INCREMENT,
			mein_text_werte TINYTEXT NOT NULL,
			mein_zahlen_werte INT NOT NULL,
			PRIMARY KEY  (id)
		  ) $charset_collate;";
 
		$result = dbDelta( $sql ); // $result speichert nur ob es geklappt hat oder nicht
	}
 
}

Hinweis: Möglichst immer in diesem Fall mit dbDelta() arbeiten. Dann könnt ihr im Nachhinein auch Änderungen an den Tabellen Spalten/Columns machen und WP passt diese an. Also nach dem Deaktivieren und Reaktivieren. Aber so könnt Ihr auch später noch Änderungen an der Tabelle vornehmen.