我正在客户端也可以访问的服务器上开发站点,而我想做的是仅向管理员显示WP_DEBUG。围绕以下方法引用Yoast的文章:

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


仅对附加了WP_DEBUG的URL(例如?debug=true

I)显示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');
    }
}


,但是我“我不确定-可以使用钩子来影响网站上的所有链接吗?这样,管理员总是可以看到我认为非常有用的调试。感谢您一如既往的帮助!

评论

这个(Yoast的)解决方法对于动态调试非常有用。我还启用了运行良好的日志记录。我稍微修改了我的代码:if(isset($ _GET ['bug'])),所以我访问link /?bug以查看debug :)

#1 楼

我认为没有通用的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);

该代码直接来自法典, wp-config.php文件。如果这样做的话,您将不必担心玩杂乱的$_GET或理清谁是管理员和谁不是管理员。
编辑:
我忘记了一个可能的解决方案。您可以使用Javascript执行此操作。简短的脚本可以将您的参数附加到页面上的所有URL,并且您可以轻松地仅为管理员加载脚本。
我仍然建议使用“日志”解决方案,因为每个人的错误都会记录下来。如果您的员工像我的一样发送错误的“报告”,例如“嘿,当您填写该表格时站点已损坏”,您将不胜感激。 :)

评论


我想我只是在屏幕上看到它们而被宠坏了:),但是日志文件在这里确实更有意义。我将做更多的研究,但这似乎是迄今为止我遇到的最好的解决方案。谢谢!

–扎克
2012-10-17 14:42

请注意,本机日志记录已硬编码为登录到Web可访问文件,这在生产中并不是一个好主意。最好通过PHP为现场站点配置私有(不在Web文件夹中)日志文件位置。

–稀有
2012年10月17日14:51

#2 楼

即使我的第一种方法是使用垃圾箱,并且s_ha_dums答案是一种干净的方法,并且可能是最好的解决方法,但让我提供另一个工作方案:在管理员登录系统后的24小时(86400秒)内有效。在wp-config.php中,根据所述cookie的存在和值有条件地定义了常量WP_DEBUG。在同一天使用同一台计算机。

在functions.php中(或作为插件): wp_configinphp中的wp_login



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


评论


安德鲁·纳辛(Andrew Nacin)在那篇文章中发表了评论,并提到初始化为时已晚,没有任何效果。我也尝试过,但没有用。

–扎克
2012年10月17日14:45

常量不能重新定义。一个人可以修改错误报告级别而不用接触常量,但这并不是完美的。在初始化之前,还有很多有趣的事情正在发生。

–稀有
2012年10月17日14:46

我认为,被接受的答案仍然是最可行的解决方案,但是为了完整起见,这种新方法应该可以在屏幕上显示调试通知。

–约翰内斯·皮尔(Johannes Pille)
2012年10月17日16:33

很好的解决方法-一定会给您一个机会

–扎克
2012年10月17日在20:53

@s_ha_dum:并不是每个人都记得每个答案-至少我不记得(我以前用Google搜索自己的答案)。我确实记得这一件事。我是第一个回答并写绝对废话的人。根本没有申请。我遵循一项不回答的政策,除非我至少有99.5%的资格是我的资格(我认为对你也一样)-在这里我已经偏离目标了。生活困扰着我,于是几个小时后,在得到一个可接受的答案之后,我仍在思考这个问题,并提出了上述建议。我也认为它很漂亮-感谢您的注意。

–约翰内斯·皮尔(Johannes Pille)
13 Mar 25 '13 at 0:10

#3 楼

它不能完全回答您的问题,但是从我的个人经验来看,我发现最好通过匹配IP地址而不是URL来启用调试模式。

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

评论


我实际上也很喜欢这个主意-因此,如果我做过如pastebin.com/m22KNakh之类的事情,在理论上可以工作,对吗?运行echo $ _SERVER ['REMOTE_ADDR']会产生:: 1在本地主机上预期的输出?老实说,这听起来像是一个单独的日志文件,这种方式(因为家庭IP似乎一直在变化)可能是个好主意。

–扎克
2012年10月17日15:05

@Zach是的,:: 1只是127.0.0.1的IPv6版本。动态IP的使用不太方便,但是无论如何,我只将其视为实时的临时故障排除技术。不替换适当的本地调试设置。

–稀有
2012年10月17日15:19

谢谢您告诉我。绝对像这里的两个选项一样,我将使用@s_ha_dum答案(除了我赞成的评论之外)也很棒。再次感谢,我真的很感谢!

–扎克
2012年10月17日15:21

#4 楼

这也是可行的技巧,但是您需要将它放在wp-config.php中,因为WP_DEBUG是在其中定义的:

#5 楼

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

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


来源:调试WORDPRESS –如何在生产站点上使用WP_DEBUG