Definir WP_DEBUG de forma condicional / solo para administradores / registrar errores (¿adjuntar consulta arg para todos los enlaces?)

20

Estoy desarrollando un sitio en un servidor al que el cliente también tiene acceso y lo que me gustaría hacer es mostrar WP_DEBUG solo para administradores. Haciendo referencia a artículo de Yoast de esta forma:

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

solo mostraría WP_DEBUG para las URL que tienen ?debug=true adjunto, como http://domain.com/?debug=true

Estaba pensando que la Debug Bar podría contener parte de esta información por defecto (ya sea o no no WP_DEBUG está activado), pero estaba pensando en la locura ya que no creo que ese sea el caso.

Entonces, lo que estaba pensando sería útil, sería una verificación para el usuario actual (tener la capacidad manage_options y luego ejecutar enlaces a través de add_query_arg() :

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

pero de lo que no estoy seguro es de si hay un gancho que pueda usar para realizar todos los enlaces en un sitio con esto. De esta manera, los administradores siempre ven la depuración, lo que pensé que sería extremadamente útil. Gracias por cualquier ayuda como siempre!

    
pregunta Zach 17.10.2012 - 15:16

5 respuestas

16

No creo que haya un enlace de URL universal. Hay muchos ganchos y es posible que lo haya perdido, pero no creo que haya uno. Puede consultar los ganchos en adambrown.info . Hay muchos enlaces de URL, pero no uno universal.

Si puedo sugerir otra solución: registrar los errores en un archivo.

/**
 * 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);

El código es directamente de el Codex para el archivo wp-config.php . Si lo haces, no tendrás que preocuparte por hacer malabarismos con $_GET o determinar quién es y quién no es un administrador.

Editar:

Olvidé una posible solución. Puedes hacerlo con Javascript. Una secuencia de comandos corta podría adjuntar su parámetro a todas las URL de la página, y puede cargar la secuencia de comandos muy fácilmente solo para los administradores.

Todavía sugeriría la solución de 'registro' ya que se registran los errores para todos. Si su gente es como la mía y envía "informes de error" como " oye, el sitio se rompe al hacer ese formulario " apreciará el registro. :)

    
respondido por el s_ha_dum 17.10.2012 - 15:33
9

Aunque mi primer enfoque fue para el contenedor de basura y la respuesta de s_ha_dums es una forma limpia y probablemente la mejor de hacerlo, permítame ofrecerle un escenario de trabajo más:

Lo siguiente establece una cookie que es válida por las siguientes 24 horas (86400 segundos) cuando un administrador inicia sesión en el sistema. En wp-config.php , la constante WP_DEBUG se define condicionalmente dependiendo de la presencia y el valor de dicha cookie.

Advertencia: WP_DEBUG después se configurará en true para todos los que inicien sesión desde el mismo navegador en la misma máquina el mismo día.

en functions.php (o como un complemento):

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

Consulte: Codex > Referencia de acción > wp_login

en wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}
    
respondido por el Johannes Pille 17.10.2012 - 16:42
3

No responde a tu pregunta de manera precisa, pero por experiencia personal descubrí que es mejor habilitar el modo de depuración haciendo coincidir la dirección IP en lugar de la URL.

Eso requiere la modificación de los enlaces y resuelve cómo identificar el administrador antes de que WP cargue la funcionalidad requerida del usuario.

    
respondido por el Rarst 17.10.2012 - 16:50
1

Este truco también es posible, pero debes ponerlo en tu wp-config.php , ya que WP_DEBUG está definido ahí:

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

Agregue ?debugsecret=debugsecret a la URL de la página que desea depurar.

    
respondido por el prosti 24.04.2016 - 03:05
1

Si tiene una IP estática, puede hacerlo:

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

Fuente: DEBUGGING WORDPRESS - CÓMO USAR WP_DEBUG EN EL SITIO DE PRODUCCIÓN

    
respondido por el jpussacq 27.06.2018 - 20:00

Lea otras preguntas en las etiquetas