首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确创建wordpress中的删除表?

如何正确创建wordpress中的删除表?
EN

Stack Overflow用户
提问于 2016-07-15 09:19:03
回答 2查看 89关注 0票数 1

我正在开发wordpress插件,但我有一个问题:当我激活插件时,我得到了错误消息“插件生成了3个意外输出字符”

我的目的是创建一个插件,在激活时创建一些表,并在未激活时销毁它们。

这是我的主要文件代码:

代码语言:javascript
复制
<?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);
    }
});

表是正确创建和删除的,但我不知道为什么我有这个输出。

也许它与我在某些表中的FK约束有关?

谢谢你..。

EN

回答 2

Stack Overflow用户

发布于 2016-07-15 09:37:57

您的WordPress数据库表具有外键约束。它意味着一个表中的一个字段被引用为另一个表的字段。因此,基本上,当您删除一个表时,如果您有这个外键约束,这些字段可能不会删除。

下面你可以阅读一些详细的信息。

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

外键是否为空和/或重复?

票数 1
EN

Stack Overflow用户

发布于 2016-07-19 16:42:10

$wpdb正在制造这个问题。在您的函数中声明global $wpdb;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38392380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档