Wordpress Plugin - Part 3 - Datenbanktabelle anlegen

Im letzten Part haben wir eine Seite für unsere Einstellungen hinzugefügt. Mit diesem Schritt registrieren wir die Erstellung einer Tabelle, in der wir unsere Anzeigen verwalten können. WordPress bietet uns hierfür zwei Funktionen, mit denen wir eine Aktion beim aktivieren und eine beim deinstallieren ausführen können.

register_activation_hook
register_uninstall_hook

Tabellenstruktur

  • id = Eine numerische Spalte, in der wir unsere Zuordnung speichern
  • created = Das Erstellungsdatum der Anzeige
  • description = Die Beschreibung
  • price = Der Preis
  • pricetype = Preistyp, wir haben hier den Wert 0 und 1, Verhandlungsbasis und Festpreis
  • adid = Anzeigennummer, hier wird die von eBay Kleinanzeigen vergebene Anzeigennummer gespeichert. Das ist nur dann wichtig, wenn eine verlinkung erstellt werden soll

Erstellung bei Aktivierung des Plugins

Die Erstellung erfolgt in der Funktion „register_activation_hook„, die wir unserer PHP Datei hinzufügen, unsere Funktion nennen wir „anzeigenchef_install

function anzeigenchef_install() 
{
  global $wpdb;

  $data_table = $wpdb->prefix . 'anzeigenchef';
  
  $charset_collate = $wpdb->get_charset_collate();

  $sql = "CREATE TABLE IF NOT EXISTS $data_table (
    id mediumint(9) NOT NULL,
    created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    description text NOT NULL,
    price INT NOT NULL DEFAULT 0,
    pricetype INT NOT NULL DEFAULT 0,
    title varchar(100) DEFAULT '' NOT NULL,
    adid varchar(30) DEFAULT '' NOT NULL,
    PRIMARY KEY  (id)
  ) $charset_collate;";

  require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
  dbDelta( $sql );
}

Damit unsere Funktion aufgerufen wird, registrieren wir diese als Hook

register_activation_hook( __FILE__, 'anzeigenchef_install' );

Aufräumen, wenn das Plugin deinstalliert wird

Beim deinstallieren unseres Plugins wäre es wünschenswert, dass auch sämtliche erstellte Tabellen entsorgt werden. Daher registrieren wir auch hierfür einen Uninstall Hook und entfernen darin die Tabelle

register_uninstall_hook( __FILE__, 'anzeigenchef_uninstall' );

function anzeigenchef_uninstall() 
{
  global $wpdb;
  
  $data_table = $wpdb->prefix . 'anzeigenchef';

  $wpdb->query("DROP TABLE IF EXISTS $data_table");
}

Prüfe nun per phpMyAdmin oder einem anderen Tool, ob Deine Tabelle wie gewünscht angelegt wurde. Teste auch das Deaktivieren.

Im gesamten sieht unsere anzeigenchef.php nun wie folgt aus

<?php
defined('ABSPATH') or die("Bye...");
/*
Plugin Name: AnzeigenChef
Plugin URI: https://anzeigenchef.roundcubes.de/wordpress-integration.html
Description: Erstellt in Kombination mit dem AnzeigenChef eine Galerie Deiner Kleinanzeigen
Version: 1.0
Author: RoundCubes GmbH
Author URI: https://anzeigenchef.roundcubes.de
Text Domain:  anzeigenchef
*/

function anzeigenchef_add_settings_link( $links ) {
    $settings_link = '<a href="admin.php?page=anzeigenchef">' . __( 'Settings' ) . '</a>';
    array_push( $links, $settings_link );
  	return $links;
}

add_filter( 'plugin_action_links_'.plugin_basename(__FILE__), 'anzeigenchef_add_settings_link' );

function anzeigenchef_create_menu() {
    add_submenu_page('options-general.php', 'AnzeigenChef Einstellungen', 'AnzeigenChef', 'manage_options', 'anzeigenchef', 'anzeigenchef_settings_page', plugins_url("images/px.png", __FILE__), 1001);
  
  add_action( 'admin_init', 'register_anzeigenchef_settings' );
}

add_action('admin_menu', 'anzeigenchef_create_menu');

function register_anzeigenchef_settings() {
  register_setting( 'anzeigenchef-settings', 'token' );
}

function anzeigenchef_settings_page() {
?>
<div class="wrap">
<h1>AnzeigenChef</h1>
<p>Du kanns im AnzeigenChef unter Einstellungen, Optionen Deinen hier hinterlegten Token eintragen. Zus&auml;tzlich kopierst Du die unten angezeigte URL und f&uuml;gst sie ebenfalls in das daf&uuml;r vorgesehene Feld ein</p>

<form method="post" action="options.php">
    <?php settings_fields( 'anzeigenchef-settings' ); ?>
    <?php do_settings_sections( 'anzeigenchef-settings' ); ?>
    <table class="form-table">
        <tr valign="top">
        <th scope="row">Zufallsgenerator</th>
        <td><input type="button" name="tokengen" value="Token jetzt generieren" onclick="JavaScript:generateToken(32);"/></td>
        </tr>
        <tr valign="top">
        <th scope="row">Hinterlege hier Deinen Token</th>
        <td><input style="min-width: 320px" type="text" name="token" id="token" value="<?php echo esc_attr( get_option('token') ); ?>" /></td>
        </tr>
        <tr valign="top">
        <th scope="row">URL f&uuml;r den AnzeigenChef</th>
        <td><?php echo plugin_dir_url( __FILE__ ); ?>transfer.php</td>
        </tr>
    </table>
    
    <?php submit_button(); ?>
 
</form>
</div>
<script>
    function generateToken(n) {
        var chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        var token = '';
        for(var i = 0; i < n; i++) {
            token += chars[Math.floor(Math.random() * chars.length)];
        }
        document.getElementById("token").value = token;
    }
</script>
<?php 
} 

register_activation_hook( __FILE__, 'anzeigenchef_install' );

function anzeigenchef_install() 
{
  global $wpdb;

  $data_table = $wpdb->prefix . 'anzeigenchef';
  
  $charset_collate = $wpdb->get_charset_collate();

  $sql = "CREATE TABLE IF NOT EXISTS $data_table (
    id mediumint(9) NOT NULL,
    created datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    description text NOT NULL,
    price INT NOT NULL DEFAULT 0,
    pricetype INT NOT NULL DEFAULT 0,
    title varchar(100) DEFAULT '' NOT NULL,
    adid varchar(30) DEFAULT '' NOT NULL,
    PRIMARY KEY  (id)
  ) $charset_collate;";

  require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
  dbDelta( $sql );
}

register_uninstall_hook( __FILE__, 'anzeigenchef_uninstall' );

function anzeigenchef_uninstall() 
{
  global $wpdb;
  
  $data_table = $wpdb->prefix . 'anzeigenchef';

  $wpdb->query("DROP TABLE IF EXISTS $data_table");
}

?>

<< Zurück zu Part 2 – Erstellung einer Einstellungsseite

Möchtest Du auf dem laufenden bleiben?

Dann abonniere diesen Blog, wir informieren Dich, sobald neue Beiträge hinzugefügt werden.

Mit Deinem Abonnement akzeptierst Du die Verarbeitung Deiner Daten gemäß unserer Datenschutzbestimmungen

Hinterlasse einen Kommentar

avatar
  Abonnieren  
Benachrichtige mich bei