首页 > 解决方案 > LF 一个 PHP 函数,用于根据产品名称在 WooCommerce 中创建新产品或现有产品的变体

问题描述

在开始之前,请注意我是一名初级开发人员,从技术上讲,这是我的第一项重大任务。

背景:母公司提供超过 15,000 种产品。子公司从这 15k 中选择一定数量在自己的网站上出售。各种产品具有相同的产品名称,但在尺寸、颜色等方面有所不同。

我正在尝试检查所选产品的重复产品名称的功能,如果没有找到,则只导入或创建这些产品。如果它确实找到了重复的产品名称,它会在制造新产品的同时创建所述产品的变体。

简而言之:当找到同名产品时,寻找 PHP 函数来创建父产品或父产品 + 变体。

下面是我到目前为止的代码,我知道 fnmatch 可能不起作用。(这是一个 API.php 文件的片段)

提前致谢!

                $product = wc_get_product( $product_id );
                    if($product_name->fnmatch("productname" $string)){ 
                    function create_product_variation( $product_id, $variation_data ){
                        // Get the Variable product object (parent)
                        $product = wc_get_product($product_id);
                                $variation_post = array(
                                'post_title'  => $product->get_name(),
                                'post_name'   => 'product-'.$product_id.'-variation',
                                'post_status' => 'publish',
                                'post_parent' => $product_id,
                                'post_type'   => 'product_variation',
                                'guid'        => $product->get_permalink()
                            );
                        
                            // Creating the product variation
                            $variation_id = wp_insert_post( $variation_post );
                        
                            // Get an instance of the WC_Product_Variation object
                            $variation = new WC_Product_Variation( $variation_id );
                        
                            // Iterating through the variations attributes
                            foreach ($variation_data['attributes'] as $attribute => $term_name )
                            {
                                $taxonomy = 'pa_'.$attribute; // The attribute taxonomy
                        
                                // If taxonomy doesn't exists we create it
                                if( ! taxonomy_exists( $taxonomy ) ){
                                    register_taxonomy(
                                        $taxonomy,
                                       'product_variation',
                                        array(
                                            'hierarchical' => false,
                                            'label' => ucfirst( $attribute ),
                                            'query_var' => true,
                                            'rewrite' => array( 'slug' => sanitize_title($attribute) ), // The base slug
                                        ),
                                    );
                                }
                        
                                // Check if the Term name exist and if not we create it.
                                if( ! term_exists( $term_name, $taxonomy ) )
                                    wp_insert_term( $term_name, $taxonomy ); // Create the term
                        
                                $term_slug = get_term_by('name', $term_name, $taxonomy )->slug; // Get the term slug
                        
                                // Get the post Terms names from the parent variable product.
                                $post_term_names =  wp_get_post_terms( $product_id, $taxonomy, array('fields' => 'names') );
                        
                                // Check if the post term exist and if not we set it in the parent variable product.
                                if( ! in_array( $term_name, $post_term_names ) )
                                    wp_set_post_terms( $product_id, $term_name, $taxonomy, true );
                        
                                // Set/save the attribute data in the product variation
                                update_post_meta( $variation_id, 'attribute_'.$taxonomy, $term_slug );
                            }
                        
                            ## Set/save all other data
                        
                            // SKU
                            if( ! empty( $variation_data['sku'] ) )
                                $variation->set_sku( $variation_data['sku'] );
                        
                            // Prices
                            if( empty( $variation_data['sale_price'] ) ){
                                $variation->set_price( $variation_data['regular_price'] );
                            } else {
                                $variation->set_price( $variation_data['sale_price'] );
                                $variation->set_sale_price( $variation_data['sale_price'] );
                            }
                            $variation->set_regular_price( $variation_data['regular_price'] );
                        
                            // Stock
                            if( ! empty($variation_data['stock_qty']) ){
                                $variation->set_stock_quantity( $variation_data['stock_qty'] );
                                $variation->set_manage_stock(true);
                                $variation->set_stock_status('');
                            } else {
                                $variation->set_manage_stock(false);
                            }
                        
                            $variation->set_weight(''); // weight (reseting)
                        
                            $variation->save(); // Save the data
                        }
                    else { //If product name does not have similarities a new one is made.
                        $post = array(
                            'post_author' => $user_id,
                            'post_content' => '',
                            'post_status' => "publish",
                            'post_title' => $product->part_num,
                            'post_parent' => '',
                            'post_type' => "product",
                            );
                            //Create post
                            $post_id = wp_insert_post( $post, $wp_error );
                                if($post_id){
                                    $attach_id = get_post_meta($product->parent_id, "_thumbnail_id", true);
                                    add_post_meta($post_id, '_thumbnail_id', $attach_id);
                                }
                                
                                wp_set_object_terms( $post_id, 'Races', 'product_cat' );
                                wp_set_object_terms( $post_id, 'simple', 'product_type');
                                
                                update_post_meta( $post_id, '_visibility', 'visible' );
                                update_post_meta( $post_id, '_stock_status', 'instock');
                                update_post_meta( $post_id, 'total_sales', '0');
                                update_post_meta( $post_id, '_downloadable', 'yes');
                                update_post_meta( $post_id, '_virtual', 'yes');
                                update_post_meta( $post_id, '_regular_price', "1" );
                                update_post_meta( $post_id, '_sale_price', "1" );
                                update_post_meta( $post_id, '_purchase_note', "" );
                                update_post_meta( $post_id, '_featured', "no" );
                                update_post_meta( $post_id, '_weight', "" );
                                update_post_meta( $post_id, '_length', "" );
                                update_post_meta( $post_id, '_width', "" );
                                update_post_meta( $post_id, '_height', "" );
                                update_post_meta( $post_id, '_sku', "");
                                update_post_meta( $post_id, '_product_attributes', array());
                                update_post_meta( $post_id, '_sale_price_dates_from', "" );
                                update_post_meta( $post_id, '_sale_price_dates_to', "" );
                                update_post_meta( $post_id, '_price', "1" );
                                update_post_meta( $post_id, '_sold_individually', "" );
                                update_post_meta( $post_id, '_manage_stock', "no" );
                                update_post_meta( $post_id, '_backorders', "no" );
                                update_post_meta( $post_id, '_stock', "" );
                            }  

标签: phpwordpresswoocommerce

解决方案


推荐阅读