Cosa potrebbe causare il mancato caricamento della pagina delle opzioni/impostazioni del mio plugin?

30 mar 2011, 00:43:22
Visualizzazioni: 5.23K
Voti: 1

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é.

2
Commenti

Forse un problema con la chiamata flush rules? Hai provato senza? (Solo un'ipotesi a caso)..

t31os t31os
30 mar 2011 01:05:00

@t31os: Bingo. Per favore, rendi questa la tua risposta se vuoi e io voterò e selezionerò. Ho dovuto commentare le flush rules. Perché?

Scott B Scott B
30 mar 2011 06:55:53
Tutte le risposte alla domanda 2
1

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

30 mar 2011 12:06:38
Commenti

Grazie. Era quello. Dovevo solo spostare le regole di flush dopo l'istruzione include. Anche se non so ancora perché

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

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.

30 mar 2011 04:24:21
Commenti

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

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

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.

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