我有一个php文件,是一个wordpress插件的一部分。我需要对我们遇到的一个问题进行调试。我想知道一个变量的值是什么。我怎样才能把变量的值打印到控制台?有人建议用echo或chrome或firefox扩展。我无法让echo输出到控制台
),也无法使用firefox的firefp扩展。
echo “$variablename";
如何从wordpress中的php文件打印到控制台
12
人关注
1
个评论
假设你不想用
var_dump()
)直接在页面上转储数值,为什么不使用
file_put_contents()
将数值输出到一个临时的日志文件呢?
grabury
发布于
2015-10-22
4
个回答
lshas
发布于
2018-08-02
已采纳
0
人赞同
Martin Braun
发布于
2018-08-02
0
人赞同
从WordPress中的PHP登录到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( $obj->{$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 ...>
Andre Medeiros负责财产提取方法
Rao Abid
发布于
2018-08-02
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 '<script>console.log("PHP error: ' . $error . '")</script>';
但我建议做@Ishas建议的其中一件事来代替。确保
不包含任何可能扰乱你的脚本的东西。$error