如何在 WooCommerce 3 中进行调试

IT技术 javascript php wordpress debugging woocommerce
2021-02-04 03:57:54

我正在使用本教程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 控制台中不产生任何输出。任何想法这里发生了什么?

任何帮助将非常感激。谢谢你。

2个回答

由于这是服务器端后台进程,请勿使用 javascript

1)。WC 日志和WooCommerce 中WC_Logger以便更好地调试

要从仪表板轻松访问日志结果,您可以登录到 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 );

笔记:

例如:

$logger = wc_get_logger();
$logger->debug( 'debug message', array( 'source' => 'my-extension' ) );

有关的:


2)。使用 WordPressWP_DEBUG日志进行调试 (作为替代方案)

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

现在您将获得用于调试的数据。

只是想提一下,由于未来可能会弃用,因此WC_Logger::log应该优先考虑WC_Logger::addWooCommerce 文档
2021-03-16 03:57:54
@Vizz85 是的,你说得对……我更新了我的答案并添加了一个小纸条,感谢你。谢谢。
2021-03-21 03:57:54
这有效,但我团队中的其他开发人员向 debug.log 输出了太多垃圾,几乎不可能从我的插件中找到输出。我想我可以只写入一个 .txt 文件,但这也不起作用。我是 stackoverflow 的新手,我不确定规则。这是我应该创建一个新问题的东西吗?
2021-03-24 03:57:54
@DallinDavis 我已经更新了我的答案...... WC_Logger WooCommerce 中有一个特殊的 Class 对调试非常有用......见上文。
2021-04-01 03:57:54

首先创建 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