Man sollte das in zwei Files aufteilen:
mein_plugin.php
den Hook einbauen, der getriggert wird bei Plugin Aktivierung
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.
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.