Cosa potrebbe causare il mancato caricamento della pagina delle opzioni/impostazioni del mio plugin?
Sto riscontrando un problema con un sito in cui è installato il mio plugin. La pagina "impostazioni" non si carica. Quando clicco su "impostazioni", carica la pagina delle impostazioni ma la pagina è vuota dopo il div "Upgrade to 3.1" come se ci fosse un die() lì.
Ho due file, plugin.php e plugin-admin.php
Ho il codice in plugin.php per configurare la pagina di amministrazione:
$my_dir = plugins_url('/img', __FILE__);
add_options_page(
'Impostazioni MY!',
'Impostazioni 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__)));
Il link "My Settings" appare correttamente sotto il menu "Impostazioni", e il link sembra puntare alla pagina corretta, ma lo script non si carica e non viene tracciato nulla all'interno di my-plugin-admin.php
Qualche idea?
AGGIORNAMENTO: con l'aiuto di t31os, ecco la funzione aggiornata che risolve il problema:
function my_settings_admin(){
include_once dirname(__FILE__) . '/my-plugin-admin.php';
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
Ho semplicemente dovuto spostare wp_rewrite e flush rules dopo l'istruzione include. Anche se non so perché.

Se dovessi avanzare un'ipotesi sulla causa del problema, la mia prima idea andrebbe verso la chiamata flush rules.
Come ha detto Andy, avere il debug attivato aiuta molto, e se davvero non vuoi vedere gli errori, puoi sempre usare il log di debug invece, utilizzando il seguente nel tuo file di configurazione..
define('WP_DEBUG', true); // Attiva la modalità debug
define('WP_DEBUG_LOG', true); // Registra gli errori in wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // Disabilita la visualizzazione degli errori
Per quanto riguarda l'aggiornamento delle impostazioni che non reindirizza, tipicamente ciò si verifica quando i nonce mancano o sono errati, anche se ammetto che nel tuo caso potrebbe essere qualcos'altro.
Vengono mostrati errori con il debug attivo? (o nel log se stai usando quel metodo?)

Quando utilizzo il codice che hai fornito, vedo la voce di menu "Le MIE! Impostazioni" come elemento principale nel menu Impostazioni e ha un URL inaspettato.
La chiamata a add_options_page
dovrebbe essere racchiusa in una funzione agganciata all'azione admin_menu
.
function my_admin_menu() {
add_options_page(
'Le MIE! Impostazioni', // Titolo della pagina
'Le MIE! Impostazioni', // Testo del menu
'manage_options', // Capacità richiesta
'my-admin', // Slug del menu
'my_settings_admin' // Funzione di callback
);
}
add_action( 'admin_menu', 'my_admin_menu' );
In generale, utilizza define( 'WP_DEBUG', true )
nel tuo file wp-config.php
per poter vedere errori e avvisi.

Grazie Andy, l'ho racchiuso all'interno di una funzione, errore mio per non averlo specificato.

Il problema è come indicato da t31os, le regole di flush. Ho dovuto posizionarle dopo l'include once piuttosto che prima. Ora lo script si carica. Tuttavia, con il debug attivo, i miei click per salvare le opzioni stanno reindirizzando a options.php e non tornando alle opzioni del plugin come previsto.
