web-dev-qa-db-fra.com

Qu'est-ce qui pourrait empêcher le chargement de la page des options/paramètres de mon plug-in?

J'ai un problème avec un site sur lequel mon plugin est installé. La page "paramètres" ne se chargera pas. Lorsque je clique sur "paramètres", il charge la page de paramètres, mais la page est vide après la "Mise à niveau à 3.1" comme si il y avait un die () là.

J'ai deux fichiers, plugin.php et plugin-admin.php

J'ai du code dans plugin.php pour configurer la page d'administration:

$my_dir = plugins_url('/img', __FILE__);
add_options_page( 
    'MY! Settings', 
    'MY! Settings', 
    '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__)));

Le lien "Mes paramètres" apparaît dans le menu "Paramètres", et le lien semble aller à la page correcte, mais le script ne se charge pas et rien ne se trace à l'intérieur de my-plugin-admin.php.

Des idées?

UPDATE: avec l'aide de t31os, voici la fonction mise à jour qui résout le problème:

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

Je devais simplement déplacer les règles wp_rewrite et flush après l'instruction include. Bien que je ne sache pas pourquoi.

1
Scott B

Si je devais essayer de deviner la cause du problème, je pensais initialement à l'appel des règles de couleur.

Comme Andy l'a dit, avoir le débogage aide beaucoup, et si vous ne voulez vraiment pas voir les erreurs, vous pouvez toujours utiliser le journal de débogage à la place, en utilisant ce qui suit dans votre fichier de configuration.

define('WP_DEBUG', true);          // Turn on debug mode
define('WP_DEBUG_LOG', true);      // Logs errors to wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // Disable displaying errors

En ce qui concerne la mise à jour non redirigée de vos paramètres, cela se produit généralement lorsque le ou les nonce (s) sont manquants ou incorrects, bien que je reconnaisse que cela pourrait être autre chose dans votre cas.

Des erreurs affichées avec le débogage? (ou dans le journal si vous utilisez cette méthode?)

2
t31os

Lorsque j'utilise le code que vous avez fourni, l'élément de menu "MY! Settings" apparaît en haut de l'écran et il comporte une URL inattendue.

L'appel à add_options_page doit être encapsulé dans une fonction liée à l'action admin_menu.

function my_admin_menu() {
    add_options_page(
        'MY! Settings',
        'MY! Settings',
        'manage_options',
        'my-admin',
        'my_settings_admin'
    );
}
add_action( 'admin_menu', 'my_admin_menu' );

En général, utilisez define( 'WP_DEBUG', true ) dans votre wp-config.php pour pouvoir voir les erreurs et les avertissements.

1
Andy