• Buenos días, una de las partes de un plugin que necesito desarrollar debe crear una tabla en la base de datos WordPress. El código que he desarrollado, revisando algún que otro libro y tutorial es el siguiente:

        function pepr_crear_tablas_bd()
        {
            global $wpdb;
    
            // Definimos el nombre de la tabla con el prefijo usado en la instalación:
            $notas = $wpdb->prefix . 'pepr_notas';
    
            // Diseñamos la consulta SQL para la nueva tabla:
            $sql = "CREATE TABLE $notas (
                    'id' int(9) NOT NULL AUTO_INCREMENT,
                    'proyecto' varchar(55) NOT NULL,
                    'titulo' varchar(55) NOT NULL,
                    'descripcion' varchar(255),
                    'prioridad' varchar(55),
                    'periodicidad' varchar(55),
                    UNIQUE KEY id(id)
            );";
    
            require_once( ABSPATH . 'wp-admin/includes/upgrade.php');
    
            // Ejecutamos la consulta:
            dbDelta($sql);
        }
    
        register_activation_hook(__FILE__, 'pepr_crear_tablas_bd');

    El problema es que una vez que activas el plugin todo funciona correctamente, una función posterior a ésta crea un submenú en el Dashboard, etc, todo correcto, pero no se ha creado la tabla en la base de datos.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • Moderador LGrusin

    (@lgrusin)

    Prueba quitarle las comillas simples a id, proyecto, titulo, etc

    Iniciador del debate José Manuel Ortiz Sánchez

    (@josemortizs)

    Lo he cambiado, sigue sin crear la tabla:

        register_activation_hook(__FILE__, 'pepr_crear_tablas_bd');
    
        function pepr_crear_tablas_bd()
        {
            global $wpdb;
    
            // Definimos el nombre de la tabla con el prefijo usado en la instalación:
            $notas = $wpdb->prefix . 'pepr';
    
            // Diseñamos la consulta SQL para la nueva tabla:
            $sql = "CREATE TABLE $notas (
                    id int(9) NOT NULL AUTO_INCREMENT,
                    proyecto varchar(55) NOT NULL,
                    titulo varchar(55) NOT NULL,
                    descripcion varchar(255),
                    prioridad varchar(55),
                    periodicidad varchar(55),
                    UNIQUE KEY id(id)
            );";
    
            require_once (ABSPATH . 'wp-admin/includes/upgrade.php');
    
            // Ejecutamos la consulta:
            dbDelta($sql);
        }
    Moderador LGrusin

    (@lgrusin)

    La prueba la he realizado con get_charset_collate y me funciona

    function pepr_crear_tablas_bd() {
     global $wpdb;
     // Definimos el nombre de la tabla con el prefijo usado en la instalación:
     $notas = $wpdb->prefix . 'pepr_notas';
     $charset_collate = $wpdb->get_charset_collate();
     // Diseñamos la consulta SQL para la nueva tabla:
     $sql = "CREATE TABLE $notas (
          id int(9) NOT NULL AUTO_INCREMENT,
          proyecto varchar(55) NOT NULL,
          titulo varchar(55) NOT NULL,
          descripcion varchar(255),
          prioridad varchar(55),
          periodicidad varchar(55),
          UNIQUE KEY id(id)
          ) $charset_collate;";
    
     require_once( ABSPATH . 'wp-admin/includes/upgrade.php');
    
     // Ejecutamos la consulta:
     dbDelta($sql);
    }
    register_activation_hook(__FILE__, 'pepr_crear_tablas_bd');
    Iniciador del debate José Manuel Ortiz Sánchez

    (@josemortizs)

    Con este código funciona perfectamente pero me he tenido que traer la función al archivo principal del plugin. Me explico, en mi jerarquía de archivos había creado, a la misma altura del plugin, una carpeta llamada includes. Dentro de includes tenía un fichero de funciones.php que contenía la función pepr_crear_tablas_bd().

    Hay algo en el código que impide que funcione así, ha funcionado a la primera al cambiarlo al inicio del fichero principal del plugin.

    Siento la confusión, muchas gracias.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • El debate ‘Mi plugin no crea la tabla en la base de datos’ está cerrado a nuevas respuestas.