Defina WP_DEBUG condicionalmente / apenas para administradores / erros de log (anexar arg de consulta para todos os links?)

20

Estou desenvolvendo um site em um servidor ao qual o cliente também tem acesso e o que eu gostaria de fazer é mostrar WP_DEBUG apenas para administradores. Referenciando o artigo do Yoast para contornar isso:

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

mostraria WP_DEBUG apenas para URLs com ?debug=true anexado, como http://domain.com/?debug=true

Eu estava pensando que a Barra de Depuração poderia conter algumas dessas informações por padrão (seja ou não WP_DEBUG está ligado), mas eu estava pensando em loucura, pois não acredito que seja o caso.

Então, o que eu estava pensando seria útil, seria uma verificação para o usuário atual (com o recurso manage_options e, em seguida, executar links por meio de add_query_arg() :

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

mas o que eu não tenho certeza é - existe um gancho que eu possa usar para efetuar todos os links em um site com isso? Dessa forma, os administradores sempre vêem a depuração que eu achei que seria extremamente útil. Obrigado por qualquer ajuda como sempre!

    
por Zach 17.10.2012 / 15:16

5 respostas

16

Eu não acho que haja um gancho de URL universal. Há muitos ganchos e eu posso ter perdido, mas não acho que haja um. Você pode olhar através dos ganchos em adambrown.info . Há muitos ganchos de URL, mas não universais.

Se eu sugerir outra solução: registre os erros em um arquivo.

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

Esse código é direto do Codex para o arquivo wp-config.php . Se você fizer isso, não precisará se preocupar em manipular $_GET ou classificar quem é e quem não é administrador.

Editar:

Esqueci uma solução possível. Você pode fazer isso com Javascript. Um script curto pode anexar seu parâmetro a todas as URLs da página, e você pode facilmente carregar o script apenas para administradores.

Eu ainda sugeriria a solução 'log', já que os erros de todos são registrados. Se o seu pessoal é como o meu e envia "relatórios" de erro como " hey, o site está quebrado quando você faz esse formulário " você apreciará o registro. :)

    
por s_ha_dum 17.10.2012 / 15:33
9

Embora minha primeira abordagem tenha sido para a lata de lixo e a resposta s_ha_dums seja uma maneira limpa e, provavelmente, a melhor, deixe-me oferecer mais um cenário de trabalho:

O seguinte define um cookie que é válido para as próximas 24 horas (86400 segundos) quando um administrador faz login no sistema. Em wp-config.php , a constante WP_DEBUG é definida condicionalmente dependendo da presença e valor do dito cookie.

Advertência: WP_DEBUG será definido como true para todos que fizerem login no mesmo navegador na mesma máquina no mesmo dia.

em functions.php (ou como um 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 );

Veja: Codex > Referência de ação > wp_login

em wp-config.php :

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

Ele não responde à sua pergunta com precisão, mas, por experiência pessoal, descobri que é melhor ativar o modo de depuração ao corresponder o endereço IP em vez do URL.

Isso requer a modificação de links e resolve como identificar o administrador antes que o WP carregue a funcionalidade necessária do usuário.

    
por Rarst 17.10.2012 / 16:50
1

Isso também é um truque possível, mas você precisa colocar isso no seu wp-config.php , já que WP_DEBUG está definido lá:

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

Adicione ?debugsecret=debugsecret ao URL da página que você deseja depurar.

    
por prosti 24.04.2016 / 03:05
1

Se você tem IP estático, pode fazer isso:

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

Fonte: DEBUGGING WORDPRESS - COMO USAR WP_DEBUG NO SITE DE PRODUÇÃO

    
por jpussacq 27.06.2018 / 20:00