如何拆分WooCommerce订单项单独存储到ACF自定义字段
你遇到的订单项合并问题根源是遍历订单商品时使用了.=字符串拼接操作,所有商品的名称、数量都被合并到了同一个字符串变量中,自然无法拆分对应到重复器的每一行。
以下是修正后的完整代码:
function create_post_after_order( $order_id ) { if ( $order_id instanceof WC_Order ){ return; } $order = wc_get_order( $order_id ); // 修复原代码未定义变量的问题 $user_ID = $order->get_user_id(); $content = ''; $repeater_data = []; // 重复器字段KEY、子字段KEY(可根据你实际的字段配置修改) $repeater_key = 'field_61645b866cbd6'; $subfield_name_key = 'field_6163f2e1542e1'; // 存储产品名称的子字段KEY $subfield_qty_key = 'field_61640103002c9'; // 存储购买数量的子字段KEY $order_items = $order->get_items(); foreach ( $order_items as $item_id => $item_data ) { $product = $item_data->get_product(); $qty = $item_data->get_quantity(); $name = $product->get_name(); // 原拼接逻辑保留,用于填充文章内容 $content.= $qty . ' ' . $name . '<br>'; // 每个订单项单独组装成重复器的一行数据 $repeater_data[] = [ $subfield_name_key => $name, $subfield_qty_key => $qty ]; } $new_post = array( 'post_title' => "Order {$order_id}", 'post_content' => $content, 'post_date' => date('Y-m-d H:i:s'), 'post_author' => $user_ID, 'post_type' => 'groeiproces', 'post_status' => 'publish', ); $post_id = wp_insert_post($new_post); // 组装完所有数据后仅调用一次update_field存储重复器,减少数据库操作 if ( $post_id && !is_wp_error($post_id) ) { update_field($repeater_key, $repeater_data, $post_id); } } add_action( 'woocommerce_thankyou', 'create_post_after_order', 10, 1 );
核心改动说明
- 移除了
$qty .=、$name .=的字符串拼接逻辑,每个订单项单独获取数量和名称 - 遍历订单项时直接组装ACF重复器要求的数组结构,每个订单项对应数组中的一个子元素
- 修复了原代码中
$user_ID、$content变量未定义的问题 - 避免循环调用
update_field,全部数据组装完成后仅调用一次,性能更优 - 增加了文章插入成功的判断,避免插入失败时报错
内容的提问来源于stack exchange,提问作者Nico Weerheim
相关产品推荐
相关产品推荐

