¿Qué podría causar que la página de opciones/configuración de mi plugin no se cargue?
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é.

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?)

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.

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

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.
