在WooCommerce中创建产品变体的最快方式?

时间:2019-05-14 作者:W__

我正在寻找WooCommerce产生750多种产品变体的最快方法。我的主机有450个变体,大约需要10分钟,而目前,我在本地运行,虽然现在需要18分钟才能生成1000个变体。与此同时,我查看了我的CPU速度,发现对我的CPU没有那么高的要求,我想知道为什么。我想如果我在本地托管它,我就能利用我的计算机规格。有没有更快的方法来做到这一点,或者我在本地托管时是否正在做一些事情?

1 个回复
SO网友:Mahesh Patel

此链接将为您的问题提供解决方案:https://stackoverflow.com/questions/47518280/create-programmatically-a-woocommerce-product-variation-with-new-attribute-value

上述解决方案基于以编程方式创建产品变体,这可能不安全,因此我建议使用WooCommerce提供的工具,创建现有和类似产品的副本,并根据需要进行更改。

从定义的变量product ID中,您将找到bellow,这是一个自定义函数,将添加(创建)产品变体。变量父产品需要为其设置所需的属性。

您需要提供以下信息:

属性/值数组Sku、价格和库存…。这些数据必须存储在格式化的多维数组中(见最后的示例)。

此函数将检查属性值(术语名称)是否已存在,如果不存在:-它将为产品属性创建它-在父变量product中设置它。

自定义函数代码:

/**
 * Create a product variation for a defined variable product ID.
 *
 * @since 3.0.0
 * @param int   $product_id | Post ID of the product parent variable product.
 * @param array $variation_data | The data to insert in the product.
 */

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_title(),
        \'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 (Thanks to Carl F. Corneil)
        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
}
代码进入功能。活动子主题(或主题)的php文件或任何插件文件。