如何调试 WordPress 插件?

2023-12-28

我最近继承了一个 WordPress 插件,其中有一些错误。我的问题是,我也是 WordPress 新手,我不知道如何记录调试消息,以便我可以弄清楚发生了什么。

我真的只需要一种方法来创建弹出窗口或登录到控制台。


WordPress Stack Exchange 上有一个很棒的问答,许多知识渊博的人解释了他们的调试技术:你如何调试插件? https://wordpress.stackexchange.com/q/145/12615

In the JavaScript你基本上需要的竞技场<script>console.log('the value is' + variable);</script>。并使用谷歌浏览器检查器 http://developer.chrome.com/extensions/tut_debugging.html and/or Firebug http://getfirebug.com/.

In PHP,这取决于事情发生的位置或您想要输出的位置。


在 WordPress 中调试 http://codex.wordpress.org/Debugging_in_WordPress

Codex 中的官方文档。

Example wp-config.php用于调试

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

将信息打印到日志文件

以下使用 OSX/Unix/Linux 系统路径,针对 Windows 进行调整。

/* Log to File
 * Description: Log into system php error log, usefull for Ajax and stuff that FirePHP doesn't catch
 */
function my_log_file( $msg, $name = '' )
{
    // Print the name of the calling function if $name is left empty
    $trace=debug_backtrace();
    $name = ( '' == $name ) ? $trace[1]['function'] : $name;

    $error_dir = '/Applications/MAMP/logs/php_error.log';
    $msg = print_r( $msg, true );
    $log = $name . "  |  " . $msg . "\n";
    error_log( $log, 3, $error_dir );
}

然后,在您的代码中调用该函数my_log_file( $post, 'The post contents are:' );


直接在渲染的 Html 中打印

/* Echo variable
 * Description: Uses <pre> and print_r to display a variable in formated fashion
 */
function echo_log( $what )
{
    echo '<pre>'.print_r( $what, true ).'</pre>';
}

并在需要的地方使用它,例如:echo_log( $post );.


FirePHP https://stackoverflow.com/search?q=firephp%20is:question

该扩展将直接在浏览器控制台中记录信息。请参阅 WordPress Answers 中的以下问答:如何使用WP-FirePHP扩展? https://wordpress.stackexchange.com/q/71569/12615.


查询监控器 https://wordpress.org/plugins/query-monitor/

这是调试工具包中必备的,该插件有很多功能,其中之一就是它Logs tab https://querymonitor.com/docs/logging-variables/,只需将其放入您的代码中并将其列在页面的插件界面中即可:

do_action( 'qm/debug', 'This happened!' );
do_action( 'qm/debug', $your_var );
do_action( 'qm/debug', [$var1, $var2] );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何调试 WordPress 插件? 的相关文章

随机推荐

  • 如何以右对齐方式打印数字? [复制]

    这个问题在这里已经有答案了 所以我正在尝试一次代码评估的简单问题乘法表 https www codeeval com open challenges 23 其中一项要求是 数字右对齐并去掉前导 尾随空格 每行 我不确定如何做到这一点 我当前
  • 运行schedule时获取laravel环境

    我在 Laravel 5 时间表中设置了一些命令 输出存储在文件中并通过电子邮件发送给我 由于该项目有多个 副本 我想使用环境名称来区分电子邮件来自哪个副本 我尝试使用app gt environment 在时间表描述中 它抛出一个错误 F
  • ASP.NET MVC:视图引擎无法找到使用 MEF 加载的模型类型的视图

    我正在尝试创建一个框架 允许将控制器和视图动态导入到 MVC 应用程序中 到目前为止它的工作原理如下 我正在使用 NET 4 ASP NET MVC 3 RC 和 Razor ViewEngine 每个项目使用 MEF 导出和导入控制器 我
  • *最快*目录列表

    我有大量目录 我想尽快读取所有文件 我的意思是 不是 DirectoryInfo GetFiles 快 而是 从磁盘低级获取集群 快 当然 NET 2 0 c 类似的问题在这里 但这种方法没有任何好处 C 目录列出海量目录 https st
  • jQuery - 触发后面元素的点击事件

    我的问题是我有这个盒子又名容器 该容器内有用户可以单击的框 为了在视觉上帮助用户 我制作了带有灰色淡出颜色的覆盖框 这告诉他们可以使用这里的盒子 但我的问题是点击事件位于覆盖框后面的框上 那么有没有办法忽略一个元素的 click 并使用下一
  • Symfony2 中的 Doctrine2:如何查看哪个对象调用导致查询?

    我正在使用 Symfony2 和 Doctrine2 对于我的项目 我制作了具有不同关联映射的实体 首先 我确实看到了大约 7 个请求一个对象的查询 所以我决定进行 热切加载 并将其减少到三个查询 但其中两个在symfony工具栏 Prof
  • 通过 Node.js 使用 HTML 5 进行视频流传输

    我正在尝试设置一个 Web 服务器 该服务器支持使用 node js 将视频流式传输到 HTML5 视频标记 到目前为止 这是我的代码 var range request headers range var total file lengt
  • 如何仅针对特定规则抑制代码块内的检查样式检查? [复制]

    这个问题在这里已经有答案了 可能的重复 如何禁用特定代码行的特定检查样式规则 http stackoverflow com questions 4023185 how to disable a particular checkstyle r
  • 如何通过 XML 中的 id 删除节点元素?

    Using javax xml and org w3c public void removeNodeFromXML File xmlfile String uuid DocumentBuilderFactory factory Docume
  • Xamarin.iOS 在 Visual Studio 2019、2022 中找不到配置文件

    Visual Studio 2019 或 2022 无法识别 Xamarin iOS 的活动预配配置文件 我解决该问题的活动 删除了 Visual Studio 项目中的 bin 和 obj 文件夹 从此处删除了 Windows 上的旧配置
  • 如何从底部对齐 UILabel 文本?

    How the UILabel可以从底部对齐 假设我的标签可以容纳三行文本 如果输入文本是单行 那么这一行应该位于标签的底部 请参考下图以更好地理解 橙色区域是标签的全框 目前只有一行 居中对齐 所以我想要的是 无论有多少行 它都应该始终对
  • 如何在android中使用IntentService重新启动服务

    我能够停止我的 ServiceA 它开始使用AlarmManager 当IntentService正在通过发送广播来运行IntentService到广播接收器 我想在我之后再次启动相同的 ServiceAIntentService完成了他的
  • 如何在apexCharts上实现点击事件或数据点选择?

    我正在尝试使用apexChartsjavascript 库并在实现点击事件时遇到问题我已阅读文档 但没有关于如何实现它的明确示例 到目前为止我有这段代码 var options chart height 350 type bar plotO
  • 我如何在水豚中点击这个按钮

    请帮我解决水豚的这个问题 我在水豚中有一个这样的按钮
  • Idris 可以推断顶级常量类型中的索引吗?

    例如 Agda 允许我这样写 open import Data Vec open import Data Nat myVec Vec myVec 0 1 2 3 and myVec将有类型Vec 4正如预期的那样 但如果我在伊德里斯尝试同样
  • getrow() 的 Scipy 稀疏矩阵替代方案

    我正在处理大型稀疏二进制矩阵 我已经用它们压缩了Scipy稀疏矩阵的实现 的计算Jaccard distance from scipy spatial distance不支持稀疏矩阵上的直接运算 因此 将整个稀疏矩阵转换为稠密矩阵 然后将每
  • Discord.js 机器人 [DISALLOWED_INTENTS]:提供的特权意图未启用或列入白名单错误

    我在 v13 上使用 Discord js Bot 时遇到问题 我越来越 DISALLOWED INTENTS 错误 我怎样才能解决这个问题 谢谢 node 16060 UnhandledPromiseRejectionWarning Er
  • Mercurial 会自动将 $Id$ 转换为 Subversion 所做的吗?

    我想知道 Mercurial 默认情况下是否将 Id 转换为 Subversion 的等效项 如下所示 test php 110 2009 04 28 05 20 41Z dordal 有人知道吗 不 不会 但您可以启用它 https we
  • Objective-C 和 C++ 之间的铸造比较

    好吧 这可能是一个学术问题 有人可以告诉我 C 的转换运算符是否 如何可以转换为 Objective C 或者如何 为什么不需要它们 我已经脱离 C 圈子好几年了 似乎每次我转身他们都会添加一些新的关键字 最近向我介绍了 C 的各种类型转换
  • 如何调试 WordPress 插件?

    我最近继承了一个 WordPress 插件 其中有一些错误 我的问题是 我也是 WordPress 新手 我不知道如何记录调试消息 以便我可以弄清楚发生了什么 我真的只需要一种方法来创建弹出窗口或登录到控制台 WordPress Stack