如何从wordpress中的php文件打印到控制台

时间:2015-10-21 17:36:58

标签: php wordpress

我有一个php文件,它是wordpress插件的一部分。我需要调试我们遇到的问题。我想知道变量的值是什么。如何将变量的值打印到控制台?建议使用echo或chrome或firefox扩展名。我无法回显输出到控制台(echo “$variablename";),也没有使用firefox的firephp扩展名。

4 个答案:

答案 0 :(得分:5)

如果您正在考虑使用javascript控制台,则无法通过PHP执行此操作。

您可以选择以下几个选项:

为了快速检查变量值,我会使用var_dump,它还会显示变量的数据类型。当您请求页面时,这将输出到浏览器。

答案 1 :(得分:3)

要回答您的问题,可以执行此操作:

echo '<script>console.log("PHP error: ' . $error . '")</script>';

但我建议做一些@Ishas建议的事情。确保$error不包含任何可能弄乱脚本的内容。

答案 2 :(得分:1)

在 WordPress 中从 PHP 登录到 DevTools 控制台

Debugging WooCommerce in WordPress with console_log in the Firefox DevTools

在这里,您可以在 WooCommerce 中调试优惠券逻辑时看到我对问题的解决方案。此解决方案仅用于调试目的。 (注意:截图不是最新的,也会暴露私有成员。)

特点

  • 允许在渲染开始之前和之后打印
  • 在前端和后端工作
  • 打印任意数量的变量
  • 对数组和对象进行编码
  • 公开对象的私有成员和受保护成员
  • 同时登录到日志文件
  • 在生产环境中安全且轻松地选择退出(以防您接听电话)
  • 打印调用者类、函数和钩子(改善生活质量)

解决方案

wp-debug.php
function console_log(): string {
    list( , $caller ) = debug_backtrace( false );
    $action = current_action();
    $encoded_args = [];
    foreach ( func_get_args() as $arg ) try {
        if ( is_object( $arg ) ) {
            $extract_props = function( $obj ) use ( &$extract_props ): array {
                $members = [];
                $class = get_class( $obj );
                foreach ( ( new ReflectionClass( $class ) )->getProperties() as $prop ) {
                    $prop->setAccessible( true );
                    $name = $prop->getName();
                    if ( isset( $class->{$name} ) ) {
                        $value = $prop->getValue( $obj );
                        if ( is_array( $value ) ) {
                            $members[$name] = [];
                            foreach ( $value as $item ) {
                                if ( is_object( $item ) ) {
                                    $itemArray = $extract_props( $item );
                                    $members[$name][] = $itemArray;
                                } else {
                                    $members[$name][] = $item;
                                }
                            }
                        } else if ( is_object( $value ) ) {
                            $members[$name] = $extract_props( $value );
                        } else $members[$name] = $value;
                    }
                }
                return $members;
            };

            $encoded_args[] = json_encode( $extract_props( $arg ) );
        } else {
            $encoded_args[] = json_encode( $arg );
        }
    } catch ( Exception $ex ) {
        $encoded_args[] = '`' . print_r( $arg, true ) . '`';
    }
    $msg = '`?`, `'
        . ( array_key_exists( 'class', $caller ) ? $caller['class'] : "\x3croot\x3e" )
        . '\\\\'
        . $caller['function'] . '()`, '
        . ( strlen( $action ) > 0 ? '`?`, `' . $action . '`, ' : '' )
        . '` ➡️ `, ' . implode( ', ', $encoded_args );
    $html = '<script type="text/javascript">console.log(' . $msg . ')</script>';
    add_action( 'wp_enqueue_scripts', function() use ( $html ) {
        echo $html;
    } );
    add_action( 'admin_enqueue_scripts', function() use ( $html ) {
        echo $html;
    } );
    error_log( $msg );
    return $html;
}
wp-config.php(部分)
// ...

define( 'WP_DEBUG', true );

// ...

/** Include WP debug helper */
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && file_exists( ABSPATH . 'wp-debug.php' ) ) {
    include_once ABSPATH . 'wp-debug.php';
}
if ( ! function_exists( 'console_log' ) ) {
    function console_log() {
    }
}

/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );

用法

  • 在呈现 HTML <head> 之前:
console_log( $myObj, $myArray, 123, "test" );
  • 呈现 HTML <head> 后(在模板等中/当上述方法不起作用时使用):
echo console_log( $myObj, $myArray, 123, "test" );

输出格式

? <caller class>\<caller function>() ? <caller action/hook>  ➡️  <variables ...>

特别感谢

答案 3 :(得分:0)

您可以编写如下的实用函数:

function prefix_console_log_message( $message ) {

    $message = htmlspecialchars( stripslashes( $message ) );
    //Replacing Quotes, so that it does not mess up the script
    $message = str_replace( '"', "-", $message );
    $message = str_replace( "'", "-", $message );

    return "<script>console.log('{$message}')</script>";
}

您可以这样调用函数:

echo prefix_console_log_message( "Error Message: This is really a 'unique' problem!" );

,这将输出到控制台,如下所示:

Error Message: This is really a -unique- problem!

请注意将引号替换为“-”。这样做是为了使消息不会像@ Josef-Engelfrost所指出的那样弄乱您的脚本

您也可以再走一步,做这样的事情:

function prefix_console_log_message( $message, $type = "log" ) {

    $message_types = array( 'log', 'error', 'warn', 'info' );
    $type          = ( in_array( strtolower( $type ), $message_types ) ) ? strtolower( $type ) : $message_types[0];
    $message       = htmlspecialchars( stripslashes( $message ) );
    //Replacing Quotes, so that it does not mess up the script
    $message = str_replace( '"', "-", $message );
    $message = str_replace( "'", "-", $message );

    return "<script>console.{$type}('{$message}')</script>";
}

并调用如下函数:

echo prefix_console_log_message( "Error Message: This is really a 'unique' problem!" , 'error');

它将在控制台中输出错误。