Php 如何在wordpress插件中创建foreach循环?

Php 如何在wordpress插件中创建foreach循环?,php,wordpress,woocommerce,foreach,Php,Wordpress,Woocommerce,Foreach,我正在尝试为woocommerce制作一个插件,在每个新订单上,获取我需要的所有数据,在foreach循环中按项目分割,然后通过cURL将每个项目数据作为单独的post发送。但是我的代码似乎没有忽略foreach循环。以下是我的循环代码: add_action('woocommerce_new_order', 'wdm_send_order_to_ext'); function wdm_send_order_to_ext( $order_id ){ // get order obje

我正在尝试为woocommerce制作一个插件,在每个新订单上,获取我需要的所有数据,在foreach循环中按项目分割,然后通过cURL将每个项目数据作为单独的post发送。但是我的代码似乎没有忽略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\u items()上使用print\r时,它被打印为 排列 (
)

确定是否能够执行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调用可能需要很长时间才能响应。根据服务器的配置,如果在X秒数后仍未完成PHP代码的执行,它可能会中止执行。由于我不熟悉命令
$order->get_items()
,也不知道它可能返回多少条记录,因此我猜想您可能很容易花费一分钟以上的时间来执行数百个或更多的cURL调用

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


此外,如果你准确地描述正在发生的事情,而不是似乎没有发生的事情,也会有所帮助。这样,答案会更有影响力。当您不确定是否执行了某些操作时,您可以始终添加一个echo语句来验证代码是否被访问。希望这有帮助

我终于发现了我的问题:在将项目添加到订单之前,hook woocommerce\u new\u订单被激活,而我使用了woocommerce\u谢谢,它成功了。

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