有条件地定义WP_DEBUG/仅用于管理员/记录错误(是否为所有链接附加查询参数?)

时间:2012-10-17 作者:Zach

我正在服务器上开发一个站点,客户端也可以访问该站点,我想做的是显示WP_DEBUG 仅限管理员使用。引用Yoast\'s article 围绕这一点:

if ( isset($_GET[\'debug\']) && $_GET[\'debug\'] == \'true\')
    define(\'WP_DEBUG\', true);
将显示WP_DEBUG 仅适用于具有?debug=true 依附于他们,就像http://domain.com/?debug=true

我在想Debug Bar 默认情况下,可能会在其中保存一些此信息(无论是否WP_DEBUG 但我当时正在疯狂思考,因为我不相信是这样的。

因此,我认为对当前用户(具有manage_options 功能,然后运行链接add_query_arg():

function zs_admin_debug() {
    if (!current_user_can(\'manage_options\')) {
        add_query_arg(\'debug\',\'true\');
    }
}
但我不确定的是,是否有一个钩子可以用来影响网站上的所有链接?这样,管理员总是可以看到调试,我认为这非常有用。一如既往地感谢您的帮助!

6 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我认为没有通用的URL挂钩。有很多钩子,我可能错过了,但我认为没有。你可以通过钩子看adambrown.info. 有很多URL挂钩,但不是通用的。

如果我可以建议另一种解决方案:将错误记录到文件中。

/**
 * 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);
该代码直接来自the Codex for the wp-config.php file. 如果你这样做,你就不用担心杂耍了$_GET 或者分清谁是管理员,谁不是管理员。

Edit:

我忘了一个可能的解决办法。您可以使用Javascript实现这一点。一个简短的脚本可以将您的参数附加到页面上的所有URL,并且您可以很容易地仅为管理员加载该脚本。

我仍然建议使用“日志”解决方案,因为每个人的错误都会被记录下来。如果您的员工和我一样,发送错误“报告”,如<嘿,当你这样做的时候,网站被破坏了;您将非常感谢日志。:)

SO网友:Johannes Pille

尽管我的第一个方法是垃圾箱,而s\\u ha\\u dums的答案是一个干净的,可能是最好的方法,但让我再提供一个工作场景:

下面设置的cookie在管理员登录系统后的24小时(86400秒)内有效。在wp配置中。php,常量WP_DEBUG 根据所述cookie的存在和价值有条件地定义。

注意事项:WP_DEBUG 之后将设置为true 适用于在同一天从同一台机器上的同一浏览器登录的所有人

在函数中。php(或作为插件):

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 );
请参见:Codex > Action Reference > wp_login

在wp配置中。php:

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

SO网友:Rarst

它并没有准确地回答您的问题,但根据个人经验,我发现通过匹配IP地址而不是URL来启用调试模式更好。

这需要修改链接,并解决了在WP加载所需的用户功能之前如何识别管理员的问题。

SO网友:jpussacq

如果您有静态IP,则可以执行以下操作:

if (\'YOUR_IP_ADDRESS\' == $_SERVER[\'REMOTE_ADDR\']) {
    define(\'WP_DEBUG\', true);
} else {
    define(\'WP_DEBUG\', false);   
}
资料来源:DEBUGGING WORDPRESS – HOW TO USE WP_DEBUG ON PRODUCTION SITE

SO网友:prosti

这也是一个可能的窍门,但你需要把它放在你的wp-config.php 自从WP_DEBUG 定义如下:

if ( isset( $_GET[\'debugsecret\'] ) && \'debugsecret\' == $_GET[\'debugsecret\'] ) {
      define( \'WP_DEBUG\', true );         
}
添加?debugsecret=debugsecret 到要调试的页面URL。

SO网友:Borgtex

为了添加另一个选项,我综合了几个答案。这一个允许您使用url参数立即更改调试模式状态(启用/禁用)一小时,还可以限制谁可以通过IP进行更改

在WP config中替换WP\\u调试行。php与此:

//Set the default debug mode. Usually it should be false
$CURRENT_DEBUG_MODE=false;
//uncomment to set a restriction by IP.
//$DEVEL_IP_ADDRESS = \'YOUR IP\';

//use cookie to set the debug mode for 1 hour with the url parameter ?debugmode = [on,off]
if (!isset($DEVEL_IP_ADDRESS) || $DEVEL_IP_ADDRESS == $_SERVER[\'REMOTE_ADDR\'])
{
    if (isset($_GET[\'debugmode\'])) {
        $CURRENT_DEBUG_MODE = \'on\'==$_GET[\'debugmode\']?true:false;
        setcookie("wp_debugmode", $_GET[\'debugmode\'],time()+3600,\'/\');
    }
    else if (isset($_COOKIE[\'wp_debugmode\'])) {$CURRENT_DEBUG_MODE = \'on\'==$_COOKIE[\'wp_debugmode\']?true:false;}
}
define(\'WP_DEBUG\', $CURRENT_DEBUG_MODE);
添加到任何URL页面?debugmode=on 启用调试(如果已禁用)和?debugmode=off 要禁用它

结束