【问题标题】:How do I make a foreach loop in a wordpress plugin?如何在 wordpress 插件中创建 foreach 循环?
【发布时间】:2020-05-21 20:22:18
【问题描述】:

我正在尝试为 woocommerce 制作一个插件,该插件在每个新订单中获取我需要的所有数据,在 foreach 循环中按项目拆分,然后通过 cURL 将每个项目数据作为单独的帖子发送。但我的代码似乎并没有忽略 foreach 循环。这是我的循环的代码:

add_action('woocommerce_new_order', 'wdm_send_order_to_ext'); 
function wdm_send_order_to_ext( $order_id ){

    // get order object and order details
    $order = wc_get_order($order_id);

    print_r(" Start ");
    if($order->get_items()>0)
    {
        print_r(" Item exist ");
        foreach($order->get_items() as $item_id => $item_data){
            print_r(" Foreach loop executing for item ID: $item_id ");
        }
    }
    else
    {
        print_r(" No Item ");
    }
    print_r(" End ");
 }

我的结果是:开始项目存在结束 编辑:当我在 $order->get_items() 上使用 print_r 时,它打印为 大批 ( )

【问题讨论】:

  • 你好,请问$order变量有没有数据?或者你确定钩子在正确的时间执行?
  • 我测试了 $order 有数据并且钩子执行成功。我之前 cURL 请求在循环之外,我可以访问订单和它包含的其他数据:地址、姓名、ID、电子邮件、电话、运输成本等......
  • 另一件事是你检查控制器至少进入foreach循环了吗?
  • 当我在循环中放一个回声时,什么都没有出来。
  • 删除循环内的所有内容,只添加单个回显语句并在回显后立即退出然后看看会发生什么?

标签: php wordpress woocommerce foreach


【解决方案1】:

确定是否能够执行 foreach 循环的最快方法是删除与 foreach 循环无关的所有内容,方法是:

add_action('woocommerce_new_order', 'wdm_send_order_to_ext'); 
function wdm_send_order_to_ext( $order_id ){

    // get order object and order details
    $order = wc_get_order($order_id);

    $endpoint = "https://enwlq927zckka.x.pipedream.net"; 
    foreach($order->get_items() as $item_id => $item_data){
        echo "Foreach loop executing for item ID: $item_id.";
    }
 }

如果您看到输出,那么您就知道您正在执行 foreach 循环。要调试这些类型的东西,您需要习惯于去除不必要的东西并构建您可以一次识别的部分。

您可能遇到的一件事(但超出了您提出问题的方式)是 cURL 调用可能需要很长时间才能响应。根据您的服务器的配置方式,如果 PHP 代码在 X 秒后没有完成执行,它可能会中止执行 PHP 代码。由于我不熟悉命令 $order->get_items() 或它可能返回的记录数,我猜您可能很容易花费超过一分钟的时间执行数百或更多的 cURL 调用。

对于这样的事情,验证过程中的每一步。

此外,如果您准确描述正在发生的事情而不是似乎没有发生的事情,这将有所帮助。这样答案会更有影响力。当您不确定是否正在执行某些操作时,您可以随时添加 echo 语句来验证是否已到达代码。希望这可以帮助!

【讨论】:

    【解决方案2】:

    我终于找到了我的问题:钩子 woocommerce_new_order 在项目添加到订单之前被激活,而不是我使用 woocommerce_thankyou 并且它起作用了。

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多