调试 PHP 代码是任何项目的一部分,但 WordPress 带有特定的调试系统,旨在简化流程以及跨核心、插件和主题标准化代码。本页介绍了 WordPress 中可用的各种调试工具,以及如何提高编码效率,以及提高代码的整体质量和互操作性。
对于非程序员或普通用户,这些选项可用于显示有关错误的详细信息。
注意:在对您的网站进行任何修改之前,请确认您已使用暂存环境或对您的网站进行了适当的备份。
用于调试的示例 wp-config.php
以下代码插入wp-config.php
文件中,会将所有错误、通知和警告记录到该目录中调用的文件中。它还将隐藏错误,因此它们不会中断页面生成。debug.log
wp-content
// Enable WP_DEBUG mode define( 'WP_DEBUG', true );
// Enable Debug logging to the /wp-content/debug.log file define( 'WP_DEBUG_LOG', true );
// Disable display of errors and warnings define( 'WP_DEBUG_DISPLAY', false ); @ini_set( 'display_errors', 0 );
// Use dev versions of core JS and CSS files (only needed if you are modifying these core files) define( 'SCRIPT_DEBUG', true );
注意:您必须将此 BEFORE 插入 wp-config.php 文件中。
/* That's all, stop editing! Happy blogging. */
WP_DEBUG
WP_DEBUG
是一个 PHP 常量(一个永久的全局变量),可用于在整个 WordPress 中触发 “debug” 模式。默认情况下,它被假定为 false,并且通常在 WordPress 开发副本的 wp-config.php
文件中设置为 true。
// This enables debugging. define( 'WP_DEBUG', true );
// This disables debugging. define( 'WP_DEBUG', false );
注: 示例中的 and 值没有用撇号 (') 括起来,因为它们是布尔值 (true/false)。如果将 constants 设置为 ,它们将被解释为 true,因为引号使其成为字符串而不是布尔值。true
false
'false'
不建议在实时站点上使用 或其他调试工具;它们用于本地测试和暂存安装。WP_DEBUG
PHP 错误、警告和通知
启用将导致显示所有 PHP 错误、通知和警告。这可能会修改 PHP 的默认行为,PHP 只显示致命错误或在达到错误时显示白屏死机。WP_DEBUG
显示所有 PHP 通知和警告通常会导致一些看起来没有损坏的内容出现错误消息,但在 PHP 中没有遵循正确的数据验证约定。一旦确定了相关代码,这些警告就很容易修复,并且生成的代码几乎总是更能抵抗 bug 并且更易于维护。
自定义 PHP 调试
如果出于调试目的需要记录非错误信息,PHP 确实为此目的提供了该功能。但是,默认情况下,此方法不提供格式正确的输出。error_log
要解决此问题,您可以在您的网站上添加另一个函数来处理格式设置,方法是创建自定义插件或使用带有一些代码片段插件的片段。该函数将充当 using 的包装器,以便在记录数组和对象之前正确格式化它们。error_log
print_r
下面是一个需要启用的示例函数。WP_DEBUG
function write_log( $data ) { if ( true === WP_DEBUG ) { if ( is_array( $data ) || is_object( $data ) ) { error_log( print_r( $data, true ) ); } else { error_log( $data ); } } }
使用示例:
write_log( 'DEBUG TEXT' ); write_log( $variable );
注意:不建议添加如上例所示的自定义代码,以避免维护、安全、性能、兼容性和代码组织问题。functions.php
已弃用的函数和参数
启用还会导致有关您网站上正在使用的 WordPress 中已弃用的函数和参数的通知。这些是尚未从核心代码中删除但计划在不久的将来删除的函数或函数参数。弃用通知通常会指示应改用的 new 函数。WP_DEBUG
WP_DEBUG_LOG
WP_DEBUG_LOG
是 WP_DEBUG 的配套程序,它会导致所有错误也保存到日志文件中。如果您想稍后查看所有通知或需要查看屏幕外生成的通知(例如,在 AJAX 请求或运行期间),这将非常有用。debug.log
wp-cron
请注意,这允许您使用 PHP 的内置函数写入日志文件,这在调试 Ajax 事件时非常有用。error_log()
设置为 时,日志将保存到站点文件系统中的内容目录(通常为 )中。或者,您可以将其设置为有效的文件路径,以便将文件保存在其他位置。true
debug.log
wp-content/debug.log
define( 'WP_DEBUG_LOG', true );
-或-
define( 'WP_DEBUG_LOG', '/tmp/wp-errors.log' );
注意:要执行任何操作,必须启用 (true)。请记住,您可以单独关闭。WP_DEBUG_LOG
WP_DEBUG
WP_DEBUG_DISPLAY
WP_DEBUG_DISPLAY
WP_DEBUG_DISPLAY
是另一个配套工具,用于控制是否在页面的 HTML 中显示调试消息。默认值为 'true',它在生成错误和警告时显示它们。将此设置为 false 将隐藏所有错误。这应该与 一起使用,以便以后可以查看错误。WP_DEBUG
WP_DEBUG_LOG
define( 'WP_DEBUG_DISPLAY', false );
注意:要执行任何操作,必须启用 (true)。请记住,您可以独立控制。WP_DEBUG_DISPLAY
WP_DEBUG
WP_DEBUG_LOG
SCRIPT_DEBUG
SCRIPT_DEBUG
是一个相关的常量,它将强制 WordPress 使用核心 CSS 和 JavaScript 文件的 “开发” 版本,而不是通常加载的缩小版本。这在测试对任何内置 或 文件的修改时非常有用。默认值为 ..js
.css
false
define( 'SCRIPT_DEBUG', true );
SAVEQUERIES
该定义将数据库查询保存到一个数组中,然后可以显示该数组以帮助分析这些查询。当常量设置为 true 时,它会导致保存每个查询以及执行所花费的时间和调用它的函数。SAVEQUERIES
define( 'SAVEQUERIES', true );
数组存储在全局 .$wpdb->queries
注意:这将对您的网站性能产生影响,因此请确保在不调试时将其关闭。
调试插件
WordPress 有许多调试插件,它们显示有关内部的更多信息,无论是针对特定组件还是一般信息。
例如,Debug Bar 向管理栏添加了一个调试菜单,其中显示查询、缓存和其他有用的调试信息。启用 WP_DEBUG 后,它还会跟踪 PHP 警告和通知,以便于查找。