2016-07-15 8 views
1

Ich entwickle eine Wordpress-Plugin, aber ich habe ein Problem: , wenn ich das Plugin aktiv ist, ich die Fehlermeldung „Das Plugin 3 Zeichen von unerwartetem Ausgang erzeugteWie erstellt man eine Löschtabellen in WordPress korrekt?

ist mein Ziel eine erstellen Plugin, das einige Tabellen erstellt, wenn es aktiviert wird, und zerstört sie bei unactivate.

Dies ist mein Haupt-Datei Code:

<?php 
/* 
Plugin Name: _Innovation Factory 
Description: Aportaci&oacute;n y mantenimiento de ideas del staff para mejorar el hotel.  
Version: 0.1  
Author: Extra Software - Thankium 
*/ 

require_once('includes/php/constants.php'); 

//creacion de las tablas necesarios 
function innovationFactoryActivacion() { 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_FASES_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `nombre` VARCHAR(45) NOT NULL, 
     PRIMARY KEY (`id`), 
     UNIQUE INDEX `nombre_UNIQUE` (`nombre` ASC));"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_ESTADOS_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `nombre` VARCHAR(45) NOT NULL, 
     PRIMARY KEY (`id`), 
     UNIQUE INDEX `nombre_UNIQUE` (`nombre` ASC));"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_HOTELES_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `nombre` VARCHAR(45) NOT NULL, 
     PRIMARY KEY (`id`), 
     UNIQUE INDEX `nombre_UNIQUE` (`nombre` ASC));"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_AREAS_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `nombre` VARCHAR(45) NOT NULL, 
     PRIMARY KEY (`id`), 
     UNIQUE INDEX `nombre_UNIQUE` (`nombre` ASC));"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_IDEAS_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `anonima` TINYINT NOT NULL, 
     `fecha_alta` TIMESTAMP NULL DEFAULT NOW(), 
     `nombre` VARCHAR(250) NULL, 
     `observacion` TEXT NULL, 
     `desarrollo` TEXT NOT NULL, 
     `id_hotel` BIGINT(20) NULL, 
     `id_estado` BIGINT(20) NOT NULL, 
     `id_fase` BIGINT(20) NOT NULL, 
     `id_area` BIGINT(20) NOT NULL, 
     `id_usuario` BIGINT(20) NOT NULL, 
     PRIMARY KEY (`id`));"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_ADJUNTOS_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `nombre` VARCHAR(1000) NOT NULL, 
     `fecha_alta` TIMESTAMP NOT NULL DEFAULT now(), 
     `id_idea` BIGINT(20) UNSIGNED NOT NULL, 
     PRIMARY KEY (`id`), 
     INDEX `ID_IDEA_idx` (`id_idea` ASC), 
     CONSTRAINT `ID_IDEA` 
     FOREIGN KEY (`id_idea`) 
     REFERENCES `" . _PREFIJO_PLUGIN_ . _TABLA_IDEAS_ . "` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION);"; 

    $sql[] = "CREATE TABLE IF NOT EXISTS " . _PREFIJO_PLUGIN_ . _TABLA_VOTACIONES_ . " (
     `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
     `id_usuario` BIGINT(20) UNSIGNED NOT NULL, 
     `id_idea` BIGINT(20) UNSIGNED NOT NULL, 
     `valoracion` INT NOT NULL, 
     `fecha_valoracion` TIMESTAMP NOT NULL DEFAULT NOW(), 
     PRIMARY KEY (`id`), 
     INDEX `ID_IDEA_idx` (`id_idea` ASC), 
     INDEX `ID_USUARIO_idx` (`id_usuario` ASC), 
     CONSTRAINT `ID_IDEA` 
     FOREIGN KEY (`id_idea`) 
     REFERENCES `" . _PREFIJO_PLUGIN_ . _TABLA_IDEAS_ . "` (`id`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION, 
     CONSTRAINT `ID_USUARIO` 
     FOREIGN KEY (`id_usuario`) 
     REFERENCES `".$wpdb->prefix."users` (`ID`) 
     ON DELETE NO ACTION 
     ON UPDATE NO ACTION);"; 

    $sql[] = "INSERT INTO " . _PREFIJO_PLUGIN_ . _TABLA_FASES_ . "(`nombre`) VALUES ('Buzón'), ('Análisis'), ('Piloto'), ('Standard');"; 
    $sql[] = "INSERT INTO " . _PREFIJO_PLUGIN_ . _TABLA_ESTADOS_ . "(`nombre`) VALUES ('Recibida'), ('Aprobada'), ('Rechazada'), ('Publicada'), ('En proceso'), ('Finalizada');"; 
    $sql[] = "INSERT INTO " . _PREFIJO_PLUGIN_ . _TABLA_AREAS_ . "(`nombre`) VALUES ('Producto'), ('Servicio'), ('Cliente');"; 
    $sql[] = "INSERT INTO " . _PREFIJO_PLUGIN_ . _TABLA_HOTELES_ . "(`nombre`) VALUES ('Petit Palace Alcalá'), ('Icon Retiro by Petit Palace'), ('Petit Palace Arana'), ('Petit Palace Ópera'), ('Petit Palace Art Gallery'), ('Petit Palace Arturo Soria'), ('Petit Palace Barcelona'), ('Old: Boquería y Opera Garden'), ('Petit Palace Plaza de la Reina'), ('Petit Palace Sevilla'), ('Petit Palace Callao'), ('Petit Palace Chueca'), ('Petit Palace Serrano'), ('Petit Palace Ruzafa'), ('Petit Palace El Prado'), ('Petit Palace Preciados'), ('Petit Palace Madrid Aeropuerto'), ('Petit Palace Catedral'), ('Petit Palace Plaza Mayor'), ('Petit Palace Paseo de Gracia'), ('Petit Palace Plaza Larios'), ('Petit Palace Plaza del Carmen'), ('Petit Palace Posada del Peine'), ('Petit Palace Castellana'), ('Petit Palace Puerta del Sol'), ('Petit Palace Plaza España'), ('Petit Palace Santa Bárbara Plaza'), ('Petit Palace Santa Cruz'), ('Petit Palace Tamarises'), ('Petit Palace Gran Vía'), ('Petit Palace Triball');"; 

    foreach($sql as $query){ 
     dbDelta($query); 
    } 

} 
// run the install scripts upon plugin activation 
register_activation_hook(__FILE__, 'innovationFactoryActivacion'); 

register_deactivation_hook(__FILE__, function(){ 
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 

    $sql = array(); 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_VOTACIONES_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_ADJUNTOS_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_IDEAS_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_AREAS_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_HOTELES_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_ESTADOS_.";"; 
    $sql[] = "DROP TABLE IF EXISTS "._PREFIJO_PLUGIN_._TABLA_FASES_.";"; 

    foreach($sql as $query){ 
     $wpdb->query($query); 
    } 
}); 

Die Tabellen korrekt erstellt werden und fallen gelassen, aber ich `t kown whay ich diesen Ausgang.

Vielleicht hat es eine Beziehung mit meinen FK-Einschränkungen in einigen Tabellen?

Thanks you ...

Antwort

1

Ihre Wordpress-Datenbank-Tabellen Foreign Key Constrains. Dies bedeutet, dass eines der Felder in einer Tabelle als eines der Felder einer anderen Tabelle referenziert wird. Wenn Sie also eine Tabelle löschen, werden diese Felder möglicherweise nicht gelöscht, wenn Sie diesen Fremdschlüssel einschränken.

Im Folgenden können Sie einige detaillierte Informationen lesen.

https://gauravsohoni.wordpress.com/2009/03/09/mysql-disable-foreign-key-checks-or-constraints/

Can a foreign key be NULL and/or duplicate?

+0

Aber das Problem ist, wenn aktiviert ... in Adiction, jetzt hatte ich gesehen, dass WordPress-Tabellen in MyIssam Engine erstellt werden, die keine Unterstützung für Fremdschlüssel haben. – msolla

0

$wpdb schafft das Problem. in deiner Funktion deklariere global $wpdb;

+0

wird in der Datei constants.php deklariert. Nedd ich redeclare in jeder Funktion? – msolla

+0

bevor Sie Zugriff auf eine globale Variable in PHP innerhalb einer Funktion erhalten müssen als global deklariert werden, sonst wird es wie eine lokale Variable behandelt – Mickey

+0

oh, danke! aber beim aktivieren es noch Drucken "Das Plugin generiert 3 Zeichen unerwarteter Ausgabe" – msolla