¿Qué podría causar que la página de opciones/configuración de mi plugin no se cargue?

30 mar 2011, 00:43:22
Vistas: 5.23K
Votos: 1

Estoy teniendo un problema con un sitio donde está instalado mi plugin. La página de "configuración" no se carga. Cuando hago clic en "configuración", carga la página pero aparece en blanco después del div de aviso "Actualizar a 3.1", como si hubiera un die() ahí.

Tengo dos archivos, plugin.php y plugin-admin.php

Tengo este código en plugin.php para configurar la página de administración:

$my_dir = plugins_url('/img', __FILE__);
add_options_page( 
    'Configuración de MY!', 
    'Configuración de MY!', 
    'manage_options', 
    'my-plugin-admin.php', 
    'my_settings_admin', 
    $my_dir.'/favicon.png', 'top'
);
register_setting( 'my_settings_options', 'my_settings', 'my_settings_validate' );

function my_settings_admin(){
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
    include_once dirname(__FILE__) . '/my-plugin-admin.php';
}

define( 'my_BASENAME', plugin_basename( __FILE__ ) );
define( 'my_BASEFOLDER', plugin_basename( dirname( __FILE__ ) ) );
define( 'my_FILENAME', str_replace( my_BASEFOLDER.'/', '', plugin_basename(__FILE__)));

El enlace "Configuración de MY!" aparece correctamente bajo el menú "Configuración", y el enlace parece ir a la página correcta, pero el script no se carga y no se ejecuta nada dentro de my-plugin-admin.php

¿Alguna idea?

ACTUALIZACIÓN: con la ayuda de t31os, aquí está la función actualizada que soluciona el problema:

function my_settings_admin(){
    include_once dirname(__FILE__) . '/my-plugin-admin.php';
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}

Simplemente tuve que mover el $wp_rewrite y flush_rules después de la declaración include. Aunque no sé por qué.

2
Comentarios

¿Quizás un problema con la llamada a flush rules? ¿Lo has intentado sin ella? (Solo una suposición)..

t31os t31os
30 mar 2011 01:05:00

@t31os: Bingo. Por favor, haz de esto tu respuesta si quieres y votaré y seleccionaré. Tuve que comentar las flush rules. ¿Por qué?

Scott B Scott B
30 mar 2011 06:55:53
Todas las respuestas a la pregunta 2
1

Si tuviera que aventurar una suposición sobre la causa del problema, mi primer pensamiento sería hacia la llamada de flush rules.

Como dijo Andy, tener el modo debug activado ayuda mucho, y si realmente no quieres ver los errores, siempre puedes usar el registro de depuración (debug log) en su lugar, usando lo siguiente en tu archivo de configuración..

define('WP_DEBUG', true);          // Activar modo debug
define('WP_DEBUG_LOG', true);      // Registrar errores en wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // Desactivar visualización de errores

Con respecto a que la actualización de tus ajustes no redireccione, típicamente eso ocurre cuando los nonce(s) faltan o son incorrectos, aunque debo admitir que podría ser otra cosa en tu caso.

¿Algún error que se muestre con el debug activado? (¿o en el registro si estás usando ese método?)

30 mar 2011 12:06:38
Comentarios

Gracias. Eso era. Solo tenía que mover las reglas de flush después de la declaración include. Aunque todavía no sé por qué

Scott B Scott B
30 mar 2011 18:04:40
2

Cuando uso el código que proporcionaste, veo el elemento de menú "¡MI! Configuración" como el primer elemento en el menú de Configuración y tiene una URL inesperada.

La llamada a add_options_page debe estar envuelta en una función enganchada a la acción admin_menu.

function my_admin_menu() {
    add_options_page(
        '¡MI! Configuración', // Título de la página
        '¡MI! Configuración', // Texto del menú
        'manage_options',     // Capacidad requerida
        'my-admin',           // Slug del menú
        'my_settings_admin'   // Función de callback
    );
}
add_action( 'admin_menu', 'my_admin_menu' );

En general, usa define( 'WP_DEBUG', true ) en tu archivo wp-config.php para que puedas ver errores y advertencias.

30 mar 2011 04:24:21
Comentarios

Gracias Andy, lo tengo envuelto dentro de una función, fue mi error no especificarlo.

Scott B Scott B
30 mar 2011 06:23:48

El problema es como t31os indicó, las reglas de flush. Tuve que colocarlas después del include once en lugar de antes. Ahora el script carga. Sin embargo, con el debug activado, mis clics para guardar las opciones están redirigiendo a options.php y no de vuelta a las opciones del plugin como se esperaba.

Scott B Scott B
30 mar 2011 07:18:24