Définir WP_DEBUG de manière conditionnelle / pour les administrateurs uniquement / les erreurs de journalisation (ajouter un argument de requête pour tous les liens?)

20

Je développe un site sur un serveur auquel le client a également accès et ce que j'aimerais faire, c'est afficher WP_DEBUG uniquement pour les administrateurs. Référencement de article de Yoast sur ce sujet:

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

afficherait WP_DEBUG uniquement pour les URL auxquelles ?debug=true est associé, comme http://domain.com/?debug=true

Je pensais que la barre de débogage pouvait contenir certaines de ces informations par défaut (que ce soit ou non). WP_DEBUG est activé), mais je pensais à la folie, car je ne crois pas que ce soit le cas.

Donc, ce que je pensais être utile, ce serait un contrôle pour l'utilisateur actuel (ayant la capacité manage_options , puis des liens via add_query_arg() :

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

mais je ne suis pas sûr: est-il possible d'utiliser un crochet pour effectuer tous les liens d'un site avec cela? De cette façon, les administrateurs voient toujours le débogage que je pensais être extrêmement utile. Merci pour toute aide comme toujours!

    
posée Zach 17.10.2012 - 15:16

5 réponses

16

Je ne pense pas qu'il existe un hook d'URL universel. Il y a beaucoup de crochets et j'ai peut-être manqué ça, mais je ne pense pas qu'il en existe un. Vous pouvez regarder à travers les crochets à l'adresse adambrown.info . Il y a beaucoup de points d'ancrage d'URL, mais pas universel.

Si je peux suggérer une autre solution: enregistrez les erreurs dans un fichier.

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Ce code provient directement du codex du fichier wp-config.php . Si vous faites cela, vous n’aurez plus à vous soucier de jongler avec $_GET ou de savoir qui est un administrateur ou non.

Modifier:

J'ai oublié une solution possible. Vous pouvez le faire avec Javascript. Un court script peut associer votre paramètre à toutes les URL de la page et vous pouvez très facilement charger le script uniquement pour les administrateurs.

Je suggérerais quand même la solution "log" puisque les erreurs pour tout le monde sont enregistrées. Si vos membres sont comme les miens et envoient des "rapports" d'erreur tels que " hé, le site est cassé lorsque vous remplissez ce formulaire ", vous apprécierez le journal. :)

    
réponse donnée s_ha_dum 17.10.2012 - 15:33
9

Même si ma première approche visait la corbeille à papier et que s_ha_dums répondait que c'était une façon simple et probablement la meilleure de procéder, laissez-moi vous proposer un scénario de travail supplémentaire:

Ce qui suit définit un cookie valide pour les prochaines 24 heures (86 400 secondes) lorsqu'un administrateur se connecte au système. Dans wp-config.php , la constante WP_DEBUG est définie de manière conditionnelle en fonction de la présence et de la valeur dudit cookie.

Avertissement: WP_DEBUG sera ensuite défini sur true pour toutes les personnes se connectant à partir du même navigateur sur le même ordinateur le même jour.

dans functions.php (ou en tant que plugin):

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

Voir: Codex > Référence de l'action > wp_login

dans wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}
    
réponse donnée Johannes Pille 17.10.2012 - 16:42
3

Cela ne répond pas précisément à votre question, mais d’expérience personnelle, il est préférable d’activer le mode débogage en faisant correspondre l’adresse IP au lieu de l’URL.

Cela nécessite de modifier les liens et de déterminer comment identifier l'administrateur avant que WP ne charge les fonctionnalités utilisateur requises.

    
réponse donnée Rarst 17.10.2012 - 16:50
1

C’est aussi une astuce possible, mais vous devez le mettre dans votre wp-config.php puisque WP_DEBUG est défini ici:

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

Ajoutez ?debugsecret=debugsecret à l'URL de la page que vous souhaitez déboguer.

    
réponse donnée prosti 24.04.2016 - 03:05
1

Si vous avez une adresse IP statique, vous pouvez le faire:

if ('YOUR_IP_ADDRESS' == $_SERVER['REMOTE_ADDR']) {
    define('WP_DEBUG', true);
} else {
    define('WP_DEBUG', false);   
}

Source: DÉBOGAGE DE WORDPRESS - UTILISATION DE WP_DEBUG SUR LE SITE DE PRODUCTION

    
réponse donnée jpussacq 27.06.2018 - 20:00

Lire d'autres questions sur les étiquettes