web-dev-qa-db-fra.com

Définition conditionnelle de WP_DEBUG

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 Article de Yoast sur le même 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 le Barre de débogage pourrait contenir certaines de ces informations par défaut (que WP_DEBUG soit activé ou non), 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 et ensuite exécuter des liens via add_query_arg() :

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

mais ce que je ne sais pas, c'est: y a-t-il un crochet que je peux utiliser 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!

20
Zach

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 à 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 de le Codex pour le fichier wp-config.php . Si vous faites cela, vous n'aurez plus à vous soucier de jongler avec $_GET ou de déterminer qui est ou non un administrateur.

Modifier:

J'ai oublié une solution possible. Vous pouvez le faire avec Javascript. Un script court pourrait attacher 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 "le site est cassé lorsque vous remplissez ce formulaire}" vous apprécierez le journal. :)

18
s_ha_dum

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> Action Reference> wp_login

dans wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}
9
Johannes Pille

Cela ne répond pas précisément à votre question, mais d’expérience personnelle, j’ai trouvé qu’il était préférable d’activer le mode débogage en faisant correspondre l’adresse IP à la place de l’URL.

Cela nécessite de modifier les liens et de déterminer comment identifier admin avant que WP ne charge la fonctionnalité utilisateur requise.

3
Rarst

C'est aussi un truc possible, mais vous devez le mettre dans votre wp-config.php puisque WP_DEBUG est défini dans cet emplacement:

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

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

1
prosti

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: DEBUGGING WORDPRESS - COMMENT UTILISER WP_DEBUG SUR UN SITE DE PRODUCTION

1
jpussacq