如何在 WooCommerce 3+ 中进行调试
Posted
技术标签:
【中文标题】如何在 WooCommerce 3+ 中进行调试【英文标题】:How to debug in WooCommerce 3+ 【发布时间】:2020-08-27 14:36:14 【问题描述】:我正在使用本教程 https://docs.woocommerce.com/document/shipping-method-api/ 为 Woocommerce 创建自定义运输方式,但我在调试时遇到问题。每当用户更新运输方式时,Woocommerce 调用都会计算运输。我已经用以下内容覆盖了这个函数。
public function calculate_shipping( $package )
// This is where you'll add your rates
$rate = array(
'idea' => $this->id,
'label' => $this->title,
'cost' => '90.00',
'calc_tax' => 'per_item'
);
echo "<script>console.log('Calculating shipping');</script>";
$this->add_rate($rate);
最后,我有一个相当复杂的计算“成本”的方法,但我无法调试它,因为该 echo 行在 chrome 控制台中不会产生任何输出。有什么想法吗?
任何帮助将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:由于这是服务器端的后台进程,请勿使用 javascript。
1)。 WooCommerce 中的 WC 日志和 WC_Logger
Class 用于更好地调试
要从仪表板轻松访问日志结果,您可以登录到 WC 记录器,而不是错误日志。
您可以通过转到 WooCommerce > 系统状态 > 日志来访问错误日志。
然后您将能够选择并“查看”您需要的错误日志文件,为您提供所需的调试详细信息。错误日志也位于站点安装中的 /wc-logs 文件夹中。
对捕获的异常运行堆栈跟踪(示例):
// Log any exceptions to a WC logger
$log = new WC_Logger();
$log_entry = print_r( $e, true );
$log_entry .= 'Exception Trace: ' . print_r( $e->getTraceAsString(), true );
$log->log( 'new-woocommerce-log-name', $log_entry );
注意事项:
WC_Logger
methods 自 WooCommerce 3 以来已更新:因此可以按上下文和严重性对日志进行分组。由于upcoming deprecation,请使用
WC_Logger
log()
method 而不是add()
method (感谢@Vizz85)。
例如:
$logger = wc_get_logger();
$logger->debug( 'debug message', array( 'source' => 'my-extension' ) );
相关:
开发 WooCommerce 博客(2017 年 1 月):Improved logging in WooCommerce 3WC_Logger
available methods 上的文档
2)。 使用 WordPress WP_DEBUG
Log 进行调试 (作为替代)
a) 首先编辑您的 wp-config.php
文件,添加以下行以启用调试(如果这些已定义,请编辑值):
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
记录错误时,它们应该出现在wp-content/debug.log
中。您可以在文本编辑器中打开此文件。
b) 在您的代码中:使用以下代码(其中$variable
是要在错误日志中显示的变量:
error_log( print_r( $variable, true ) );
现在您将获得用于调试的数据。
【讨论】:
这行得通,但我团队中的其他开发人员输出了太多垃圾到 debug.log,几乎不可能从我的插件中找到输出。我想我可以只写一个 .txt 文件,但这也不起作用。我是***的新手,我不确定规则。我应该为此创建一个新问题吗? @DallinDavis 我已经更新了我的答案……WooCommerce 中有WC_Logger
特殊类对调试非常有用……见上文。
只是想提一下,WC_Logger::log
应该优先于 WC_Logger::add
,因为未来可能会被弃用:WooCommerce docs
@Vizz85 是的,你完全正确......我更新了我的答案并添加了一个小笔记来感谢你。谢谢。【参考方案2】:
首先创建 PHP 辅助函数
function console_output($data)
$output = $data;
if (is_array($output))
$output = implode(',', $output);
echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
那么你可以这样使用它:
public function calculate_shipping( $package )
// This is where you'll add your rates
$rate = array(
'idea' => $this->id,
'label' => $this->title,
'cost' => '90.00',
'calc_tax' => 'per_item'
);
console_output("Calculating shipping");
$this->add_rate($rate);
这将创建如下输出:
Debug Objects: Calculating shipping
【讨论】:
以上是关于如何在 WooCommerce 3+ 中进行调试的主要内容,如果未能解决你的问题,请参考以下文章
在 WooCommerce 3 中获取订单运送物品的详细信息
php [WooCommerce插件开发人员手册]记录可用于调试目的的WooCommerce数据。
php [WooCommerce插件开发人员手册]记录可用于调试目的的WooCommerce数据。
如何在 phpMyAdmin 中轻松访问所有帖子标题以从 WooCommerce 进行编辑?