WooCommerce开发中foreach嵌套遍历追加内容到变量的解决方法
问题原因说明
- 语法报错的核心原因是你没有结束前一行的
$content字符串拼接语句,就直接插入了foreach循环,PHP不支持在表达式中间嵌套循环语句,所以抛出了语法错误。 - 此外你的原有写法还有逻辑问题:循环内只调用了
esc_html()处理商品名,但没有将处理后的内容追加到$content变量中,就算语法修复,商品名称也不会显示在最终通知里。
正确实现代码
foreach ($recent_orders as $recent_order) { $order_id = $recent_order->get_id(); $_order = wc_get_order($order_id); $order_date = $_order->get_date_created(); $order_status = $recent_order->get_status(); $order_link = get_site_url(); $order_link .= "/wp-admin/post.php?post="; $order_link .= $order_id; $order_link .= "&action=edit"; $billing_first_name = $recent_order->get_billing_first_name() . ' ' . $recent_order->get_billing_last_name(); $order_javena='Не јавено'; $statusPrefix = "wc-"; $_orderStatus = $statusPrefix . $order_status; $_order_status = $order_status_map[$_orderStatus]; $date_format = get_option('date_format'); $time_format = get_option('time_format'); $format_order_date = $time_format . " - " . $date_format; $items = $recent_order->get_items(); // 获取订单商品数组 // 先拼接表格行的前半部分内容,语句末尾加;结束当前表达式 $content .= "<tr><td>" . esc_html($billing_first_name) . "</td><td>" . esc_html($order_date->date($format_order_date)) . "</td><td>" . esc_html($order_javena) . "</td><td><a href='" . esc_html($order_link) . "' target='_blank'>ПОГЛЕДНИ ДЕТАЛИ</a><br>"; // 循环遍历商品,将每个商品名称追加到$content中,末尾加<br>实现换行 foreach ( $items as $item ) { $product_name = $item['name']; $content .= esc_html($product_name) . "<br>"; } // 最后拼接表格行的结束标签 $content .= "</td></tr>"; }
如果需要展示商品数量、单价等其他信息,只需要在循环内调用WooCommerce对应方法获取数据,再追加到$content变量即可。
内容的提问来源于stack exchange,提问作者TheFrisb
相关产品推荐
相关产品推荐

