Problemas al activar hook de base de datos al incluir archivos

  • Autor Autor adruiz
  • Fecha de inicio Fecha de inicio
adruiz

adruiz

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Intentaré resumir mi problema lo máximo posible.

Estoy creando un plugin para WP con el cual creo una tabla personalizada en la base de datos principal de WP. El código vendría a ser uno como este:

PHP:
function create_prueba_database() {
        global $wpdb;
        $charset_collate = $wpdb->get_charset_collate();

        $table_name = $wpdb->prefix .'db_bd_prueba';
        $sql = "CREATE TABLE $table_name(
            id INTEGER NOT NULL AUTO_INCREMENT,
            name TEXT NOT NULL,
            url TEXT NOT NULL,
            price TEXT NOT NULL,
            PRIMARY KEY (id)
        ) $charset_collate;";

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

    register_activation_hook(__FILE__, 'create_prueba_database');

Mi plugin principalmente tiene un archivo plugin.php en la raíz del plugin con los datos del mismo, mientras que el código que os muestro se encuentra en otro dentro de una carpeta, /api/database.php.

¿Qué ocurre? Que el código en cuestión solo funciona cuando lo inserto a pelo en el fichero plugin.php, si hago un include o un require tanto normal como en su variable _once, pese a que la ruta es correcta (y me he asegurado de ello) nunca lo pilla, o más bien dicho, no hace nada. No sé si el problema podría ser el ABSPATH o el register_activation_hook, pero me interesa que este código se llame desde donde toca y no tener que guarrear demasiado con la estructura del plugin.

Ahora mismo, el script se enlaza así:
PHP:
include plugin_dir_path( __FILE__ ) ."api/database.php";

No creo que guarde mucha relación, pero cada vez que activo/desactivo el plugin me da un error de que se han generado X caracteres de salida inesperados.

¿Alguna sugerencia? Gracias de antemano 👍
 
Creo que register_activation_hook tiene que estar si o si en el archivo principal.
 
Te recomiendo que uses class para no tener conflictos con otras funciones.
 
Toda la razón @YeltsinReyes, trasteando vi que funcionaba como debía con el hook en el archivo principal, así que para no esmerarme demasiado al final he tirado de esa solución.

Muchas gracias 👍
 
Atrás
Arriba