【问题标题】:How do I debug a WordPress plugin?如何调试 WordPress 插件?
【发布时间】:2013-01-10 14:35:52
【问题描述】:

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

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

【问题讨论】:

  • 刚刚想出了一个简单的技巧来显示 javascript 警报消息。添加: echo "";这应该让我继续前进,但我真的很想知道社区标准,这样其他人就不会迷失在我的代码中。而且,我讨厌将这样的消息(必须删除)放在我的代码中。而是使用可以在一个地方关闭和打开调试消息的系统!
  • 嗯,问题是当 WordPress 是 PHP、JavaScript、HTML 和 CSS 的混合体时,您正在询问 WordPress 调试。因此,您应该扩展您对如何调试的想法,方法是按照您使用alert('Hello World!'); 描述的方式进行我们都已完成的操作。学习如何查看 PHP 日志并基本学会一丝不苟。因为 WordPress 很棒,但它建立在其他已建立调试方法的工具之上。祝你好运!

标签: wordpress debugging


【解决方案1】:

在 WordPress Stack Exchange 上有精彩的问答,很多知识渊博的人解释了他们的调试技术:How do you debug plugins?

Javascript 领域,您基本上需要<script>console.log('the value is' + variable);</script>。并使用Google Chrome inspector 和/或Firebug

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


Debugging in WordPress

Codex 中的官方文档。

用于调试的示例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

此扩展程序将直接在浏览器控制台中记录信息。请参阅 WordPress Answers 中的以下问答:How to use WP-FirePHP extension?

【讨论】:

    【解决方案2】:

    一般的PHP调试策略是使用print_r( $var )语句,刷新页面。简单易行。如果你想步入代码Xdebug就是你要安装的。

    【讨论】:

    • 他似乎也在处理 JavaScript。但我同意你的一般调试策略心态。
    【解决方案3】:

    我知道我的答案是在最初的问题几年后才给出的,但是由于我最近遇到了同样的问题,但仍然找不到令人满意的解决方案,所以我为此编写了一个插件。

    它专门解决了 OP 需求:

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

    希望它能帮助所有插件/主题开发人员,他们正在寻找一种快速简便的方法来调试他们的代码https://wordpress.org/plugins/bugfu-console-debugger

    只需安装它并从您的 PHP 代码中调用日志记录方法即可直接登录到浏览器 JavaScript 控制台。

    BugFu::log($your_string-array-object);
    

    【讨论】:

    • 看起来很棒!但是,如果您可以在此处包含将 PHP 命令转换为 JS 控制台消息的概念,那就太棒了:) 通常这种答案被认为是自我提升(甚至是开源等),实际上并没有解决编程问题手头……
    • 感谢@brasofilo 的澄清 :) 我猜反对票是因为这个。我会按照你的建议做,我会尝试解释我使用的技术。即使每次都从头开始编写代码不是很实用(因此需要一个插件),但有人会觉得它很有趣。
    • 酷 :) 哦,回答老问题也没问题。几年后,他们可能会继续被访问并为一些迷失的编程灵魂提供帮助,哈哈
    【解决方案4】:

    通过使用 Visual Studio 和开发工具 php 调试器扩展,您实际上可以逐步调试它,而不是记录它们并在运行时试图找出变量值。可能还有其他选择。

    PS:它不是免费的:(

    【讨论】:

      【解决方案5】:

      根据your commentMuch rather use a system where debug messages can be turned off and on in one place

      它可以在 WordPress 中完成。有一个名为 WP_DEBUG 的常量,您可以从 WordPress 文件夹中的 wp-config.php 文件(在该文件中添加数据库参数 )。

      所以,你可以使用:

      if( WP_DEBUG ){
      echo "<script> alert('Hello World!'); </script>"; 
      }
      

      仅当您将 WP_DEBUG 设置为 true(例如在网站的开发版本上,例如在您的本地主机上)时,警报才会显示,而不会在您的网站的生产版本上显示(您只需在那里将WP_DEBUG 设置为false)。

      【讨论】:

      • 在大多数情况下,Wordpress 只是默默地失败,即使启用了调试,插件也不显示任何内容。
      • 您应该检查您的 PHP 设置和服务器日志。
      【解决方案6】:
      1. 没有调试就不要开发!
      2. 请阅读:http://wp.smashingmagazine.com/2011/03/08/ten-things-every-wordpress-plugin-developer-should-know/

      祝你好运,你可以让我们更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 2017-06-10
        • 2014-09-02
        • 1970-01-01
        相关资源
        最近更新 更多