Php WP_insert_术语在WooCommerce产品导入期间创建重复类别

Php WP_insert_术语在WooCommerce产品导入期间创建重复类别,php,wordpress,woocommerce,import,Php,Wordpress,Woocommerce,Import,我在这个问题上绞尽脑汁好几天了,不明白为什么我要导入的代码会创建重复的产品类别 问题:我从第三方API中提取了大约30000个JSON格式的产品,然后将其插入到自定义数据库中,我从中提取每个产品的数据和格式以导入WooCommerce,这些过程运行良好。当我插入类别术语时,问题就出现了。使用wp_insert_term插入类别时,某些类别会重复,但具有不同的URL段塞 即 这是我循环使用的类别数组,用于创建分层类别路径: $result= $wpdb->get_var( "SEL

我在这个问题上绞尽脑汁好几天了,不明白为什么我要导入的代码会创建重复的产品类别

问题:我从第三方API中提取了大约30000个JSON格式的产品,然后将其插入到自定义数据库中,我从中提取每个产品的数据和格式以导入WooCommerce,这些过程运行良好。当我插入类别术语时,问题就出现了。使用wp_insert_term插入类别时,某些类别会重复,但具有不同的URL段塞

这是我循环使用的类别数组,用于创建分层类别路径:

$result= $wpdb->get_var( "SELECT `results_array`
                                             FROM $table_name 
                                             WHERE `arr_serialize2` = $textProductSku  
                                             AND  `update_type` = 'create' 
                                        ");

            $final_product_formate_arrays = json_decode($result, true);

           

            $post = array(
                'post_title' => $final_product_formate_arrays['parent_or_simple_product']['title'],
                'post_content' => $final_product_formate_arrays['parent_or_simple_product']['longDescription'],
                'post_excerpt' => isset( $final_product_formate_arrays['parent_or_simple_product']['shortDescription']) ?  $final_product_formate_arrays['parent_or_simple_product']['shortDescription'] : '' ,
                'post_status' => "publish",
                'post_parent' => '',
                'post_type' => "product",
            );
            $post_id = wp_insert_post( $post );
            if (!$post_id) 
            {
                return false;
            }
            update_post_meta($post_id,'_complete_product_data',json_encode($final_product_formate_arrays));
            update_post_meta($post_id, '_sku', $final_product_formate_arrays['parent_or_simple_product']['sku']);
            update_post_meta( $post_id, '_visibility', 'visible' ); 
            
            if($final_product_formate_arrays['parent_or_simple_product']['inStoreAvailability'] > 0) 
            {
            
                update_post_meta( $post_id, '_manage_stock', "yes" );
                update_post_meta( $post_id, '_stock', $final_product_formate_arrays['parent_or_simple_product']['stockQuantity'] );
                update_post_meta( $post_id, '_stock_status', 'instock');

            } elseif($final_product_formate_arrays['is_variation']){
                
                update_post_meta( $post_id, '_manage_stock', "no" );
                update_post_meta( $post_id, '_stock_status', 'instock');
                
            } else  {


                update_post_meta( $post_id, '_manage_stock', "yes" );
                update_post_meta( $post_id, '_stock_status', 'outofstock');
                update_post_meta( $post_id, '_stock', 0 );
            }

            update_post_meta( $post_id, '_regular_price', $final_product_formate_arrays['parent_or_simple_product']['regularPrice'] );
            update_post_meta( $post_id, '_sale_price', $final_product_formate_arrays['parent_or_simple_product']['salePrice'] );
            update_post_meta( $post_id, '_price', $final_product_formate_arrays['parent_or_simple_product']['salePrice'] );
            update_post_meta( $post_id, '_weight', $final_product_formate_arrays['parent_or_simple_product']['weight'] );
            update_post_meta( $post_id, '_length', $final_product_formate_arrays['parent_or_simple_product']['depth'] );
            update_post_meta( $post_id, '_width', $final_product_formate_arrays['parent_or_simple_product']['width'] );
            update_post_meta( $post_id, '_height', $final_product_formate_arrays['parent_or_simple_product']['height'] );
            update_post_meta( $post_id, '_wc_average_rating', $final_product_formate_arrays['parent_or_simple_product']['reviewAverage'] );
            

         

                **$categoryPath = $final_product_formate_arrays['parent_or_simple_product']['categoryPath'];
                if(!empty($categoryPath))
                {
                    $parent_id='';
                    
                    
                    foreach ($categoryPath as $key => $value) {
                        
                        if($key!=0) {
                            $new_str = str_replace( array( ',', '&' ), '-', $value['name'] );
                            $new_str = sanitize_title( $new_str );
                            $parent_term = term_exists( $parent_id, 'product_cat' );  // array is returned if taxonomy is given
                            if( isset( $parent_term )) {
                            $parent_id = $parent_term['term_id'];  // get numeric term id
                            
                            } else{
                                $parent_id = 0;
                            }
                                                  
                                    $term = wp_insert_term( $value['name'], 'product_cat', [
                                        'description'=> $value['name'],
                                        'parent' => intval( $parent_id ),
                                        'slug' =>  $new_str,
                                    ]
                                );
                        
                                              
                       if( is_wp_error( $term ) && isset( $term->error_data['term_exists'] ) )
                        {
                            $term_id = isset( $term->error_data['term_exists'] ) ?  $term->error_data['term_exists'] :'';
                            $term_error = $term->get_error_message();
                            $term_error .="\n";
                            error_log($term_error, 3, $pluginlog);
                        } else if ( !is_wp_error( $term ) ) {
                            $new_term_id = isset( $term['term_id']) ? $term['term_id'] : '';
                            $term_id = $new_term_id;
                        }
                        $term_id = intval($term_id);
                       
                              
                        $parent_id = !empty($term_id)?$term_id:'';
                                       
                      wp_set_post_terms($post_id, $term_id, 'product_cat');**

                   
                    // wp_set_object_terms($post_id, $term_id, 'product_cat');
                    } else {

                        continue;
                    }

                    
                  }

                }

“categoryPath”:[{“id”:“cat00000”,“name”:“Company name”},{“id”:“abcat0900000”,“name”:“Appliances”},{“id”:“abcat0904000”,“name”:“Ranges,cooktop&coven”},{“id”:“abcat0904002”,“name”:“抽油烟机和下吸式通风”}

这是我的单一产品导入代码,底部的相关类别部分以$categoryPath开头,只是想给出我所做工作的一些背景:

$result= $wpdb->get_var( "SELECT `results_array`
                                             FROM $table_name 
                                             WHERE `arr_serialize2` = $textProductSku  
                                             AND  `update_type` = 'create' 
                                        ");

            $final_product_formate_arrays = json_decode($result, true);

           

            $post = array(
                'post_title' => $final_product_formate_arrays['parent_or_simple_product']['title'],
                'post_content' => $final_product_formate_arrays['parent_or_simple_product']['longDescription'],
                'post_excerpt' => isset( $final_product_formate_arrays['parent_or_simple_product']['shortDescription']) ?  $final_product_formate_arrays['parent_or_simple_product']['shortDescription'] : '' ,
                'post_status' => "publish",
                'post_parent' => '',
                'post_type' => "product",
            );
            $post_id = wp_insert_post( $post );
            if (!$post_id) 
            {
                return false;
            }
            update_post_meta($post_id,'_complete_product_data',json_encode($final_product_formate_arrays));
            update_post_meta($post_id, '_sku', $final_product_formate_arrays['parent_or_simple_product']['sku']);
            update_post_meta( $post_id, '_visibility', 'visible' ); 
            
            if($final_product_formate_arrays['parent_or_simple_product']['inStoreAvailability'] > 0) 
            {
            
                update_post_meta( $post_id, '_manage_stock', "yes" );
                update_post_meta( $post_id, '_stock', $final_product_formate_arrays['parent_or_simple_product']['stockQuantity'] );
                update_post_meta( $post_id, '_stock_status', 'instock');

            } elseif($final_product_formate_arrays['is_variation']){
                
                update_post_meta( $post_id, '_manage_stock', "no" );
                update_post_meta( $post_id, '_stock_status', 'instock');
                
            } else  {


                update_post_meta( $post_id, '_manage_stock', "yes" );
                update_post_meta( $post_id, '_stock_status', 'outofstock');
                update_post_meta( $post_id, '_stock', 0 );
            }

            update_post_meta( $post_id, '_regular_price', $final_product_formate_arrays['parent_or_simple_product']['regularPrice'] );
            update_post_meta( $post_id, '_sale_price', $final_product_formate_arrays['parent_or_simple_product']['salePrice'] );
            update_post_meta( $post_id, '_price', $final_product_formate_arrays['parent_or_simple_product']['salePrice'] );
            update_post_meta( $post_id, '_weight', $final_product_formate_arrays['parent_or_simple_product']['weight'] );
            update_post_meta( $post_id, '_length', $final_product_formate_arrays['parent_or_simple_product']['depth'] );
            update_post_meta( $post_id, '_width', $final_product_formate_arrays['parent_or_simple_product']['width'] );
            update_post_meta( $post_id, '_height', $final_product_formate_arrays['parent_or_simple_product']['height'] );
            update_post_meta( $post_id, '_wc_average_rating', $final_product_formate_arrays['parent_or_simple_product']['reviewAverage'] );
            

         

                **$categoryPath = $final_product_formate_arrays['parent_or_simple_product']['categoryPath'];
                if(!empty($categoryPath))
                {
                    $parent_id='';
                    
                    
                    foreach ($categoryPath as $key => $value) {
                        
                        if($key!=0) {
                            $new_str = str_replace( array( ',', '&' ), '-', $value['name'] );
                            $new_str = sanitize_title( $new_str );
                            $parent_term = term_exists( $parent_id, 'product_cat' );  // array is returned if taxonomy is given
                            if( isset( $parent_term )) {
                            $parent_id = $parent_term['term_id'];  // get numeric term id
                            
                            } else{
                                $parent_id = 0;
                            }
                                                  
                                    $term = wp_insert_term( $value['name'], 'product_cat', [
                                        'description'=> $value['name'],
                                        'parent' => intval( $parent_id ),
                                        'slug' =>  $new_str,
                                    ]
                                );
                        
                                              
                       if( is_wp_error( $term ) && isset( $term->error_data['term_exists'] ) )
                        {
                            $term_id = isset( $term->error_data['term_exists'] ) ?  $term->error_data['term_exists'] :'';
                            $term_error = $term->get_error_message();
                            $term_error .="\n";
                            error_log($term_error, 3, $pluginlog);
                        } else if ( !is_wp_error( $term ) ) {
                            $new_term_id = isset( $term['term_id']) ? $term['term_id'] : '';
                            $term_id = $new_term_id;
                        }
                        $term_id = intval($term_id);
                       
                              
                        $parent_id = !empty($term_id)?$term_id:'';
                                       
                      wp_set_post_terms($post_id, $term_id, 'product_cat');**

                   
                    // wp_set_object_terms($post_id, $term_id, 'product_cat');
                    } else {

                        continue;
                    }

                    
                  }

                }