当前位置: 首页 > 知识库问答 >
问题:

如何在woocommerce中以编程方式设置产品属性变体价格?

司徒墨竹
2023-03-14

我有一个产品属性变化,有选项-小-20美元中等-25美元大-30美元

因为商店里的所有产品都有相同的价格。

如何以编程方式设置属性值的价格?

当我将3个属性变体按钮添加为变体时,它们会显示在产品页面上。

如何更改产品的价格时,"小"选项选择编程方式,而不是设置价格的变化选项在管理面板。

共有1个答案

诸葛雨泽
2023-03-14

根据我们的理解,想要添加不同尺寸和不同价格的产品。

有2种方式:

1.您可以从仪表板添加如下内容:https://www.ostraining.com/blog/woocommerce/product-variations/

您可以像这样以编程方式添加:

function insert_product ($product_data)
{
    $post = array( // Set up the basic post data to insert for our product

     'post_author'  => 1,
     'post_content' => $product_data['description'],
     'post_status'  => 'publish',
     'post_title'   => $product_data['name'],
     'post_parent'  => '',
     'post_type'    => 'product'
 );

 $post_id = wp_insert_post($post); // Insert the post returning the new post id

 if (!$post_id) // If there is no post id something has gone wrong so don't proceed
 {
     return false;
 }

 update_post_meta($post_id, '_sku', $product_data['sku']); // Set its SKU
 update_post_meta( $post_id,'_visibility','visible'); // Set the product to visible, if not it won't show on the front end

 wp_set_object_terms($post_id, $product_data['categories'], 'product_cat'); // Set up its categories
 wp_set_object_terms($post_id, 'variable', 'product_type'); // Set it to a variable product type

  insert_product_attributes($post_id, $product_data['available_attributes'], $product_data['variations']); // Add attributes passing the new post id, attributes & variations
  insert_product_variations($post_id, $product_data['variations']); // Insert variations passing the new post id & variations
}


 function insert_product_attributes ($post_id, $available_attributes, $variations)
{
   foreach ($available_attributes as $attribute) // Go through each attribute
   {
     $values = array(); // Set up an array to store the current attributes values.

     foreach ($variations as $variation) // Loop each variation in the file
     {
         $attribute_keys = array_keys($variation['attributes']); // Get the keys for the current variations attributes

         foreach ($attribute_keys as $key) // Loop through each key
         {
             if ($key === $attribute) // If this attributes key is the top level attribute add the value to the $values array
             {
                 $values[] = $variation['attributes'][$key];
             }
         }
     }
     $values = array_unique($values); // Filter out duplicate values

     wp_set_object_terms($post_id, $values, 'pa_' . $attribute);
 }

 $product_attributes_data = array(); // Setup array to hold our product attributes data

 foreach ($available_attributes as $attribute) // Loop round each attribute
 {
     $product_attributes_data['pa_'.$attribute] = array( // Set this attributes array to a key to using the prefix 'pa'

         'name'         => 'pa_'.$attribute,
         'value'        => '',
         'is_visible'   => '1',
         'is_variation' => '1',
         'is_taxonomy'  => '1'

     );
 }

 update_post_meta($post_id, '_product_attributes', $product_attributes_data); // Attach the above array to the new posts meta data key '_product_attributes'
}

function insert_product_variations ($post_id, $variations)
{
  foreach ($variations as $index => $variation)
   {
     $variation_post = array( // Setup the post data for the variation

         'post_title'  => 'Variation #'.$index.' of '.count($variations).' for product#'. $post_id,
         'post_name'   => 'product-'.$post_id.'-variation-'.$index,
         'post_status' => 'publish',
         'post_parent' => $post_id,
         'post_type'   => 'product_variation',
         'guid'        => home_url() . '/?product_variation=product-' . $post_id . '-variation-' . $index
     );

     $variation_post_id = wp_insert_post($variation_post); // Insert the variation

     foreach ($variation['attributes'] as $attribute => $value) // Loop through the variations attributes
     {
         $attribute_term = get_term_by('name', $value, 'pa_'.$attribute); // We need to insert the slug not the name into the variation post meta

         update_post_meta($variation_post_id, 'attribute_pa_'.$attribute, $attribute_term->slug);
     }

     update_post_meta($variation_post_id, '_price', $variation['price']);
     update_post_meta($variation_post_id, '_regular_price', $variation['price']);
    }
 }

 function insert_products ($products)
 {
    if (!empty($products)) // No point proceeding if there are no products
    {
       array_map('insert_product', $products); // Run 'insert_product' function from above for each product
    }
 }
 $json = file_get_contents('product-data.json'); // Get json from sample file
// $products_data = json_decode($json_file, true); // Decode it into an array
echo json_last_error();

// if(get_magic_quotes_gpc()){
   //  $d = stripslashes($json);
 // }else{
  //  $d = $json;
 // }
 $d = json_decode($d,true);
 $products_data = json_decode( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $json), true );
 echo "<h1>json</h1>";
 echo "<pre>";
 print_r($json);
 echo "</pre>";
 echo "<h1>Product data</h1>";
 echo "<pre>";
 var_dump($products_data);
 echo "</pre>";

 insert_products($products_data);

其中$product_数据样本:

$product_data = array(
    'sku' => '123SKU',
    'categories' => array('size', 'color'),
    'available_attributes' => array('size', 'color'),
    'variations' => array( 
        'size' => array(
            'attributes' => array( 'XL', 'M', 'S' ), 
        ),
        'color' => array(
            'attributes' => array( 'Blue', 'Red', 'Green' )  
        )
    )
 )

 insert_products($products_data); 

注意:您可以创建product-data.json和导入产品,或者您可以创建$product_data = (); 并设置insert_products()函数

有关传统信息:

您还可以查看此URL以获取更多信息https://newbedev.com/create-programmatically-a-woocommerce-product-variation-with-new-attribute-values

 类似资料:
  • 我有一个Woocommerce商店,里面有各种各样的产品。 我要给所有产品打八折,属于产品类别Cuckoo 现在我所要做的就是在我的functions.php中设定一个销售价格 它的做法如下: 如果我在计算后var_dump$sale_price的结果,我会得到正确的答案,但是前端的价格显示会击出正常价格,并将销售价格显示为正常价格。 是否有一个钩子/过滤器可以用来实现这一点? 我还尝试通过以下方

  • 我正在使用在woocommerce中以编程方式添加产品。除了产品属性外,其他所有功能都正常工作。除非我从管理员处单击“更新”,否则产品页面视图中不会显示产品属性。 我正在添加成吨的产品,所以有没有办法在产品页面的下拉列表中显示变化。 这是我的代码,它工作正常,所有内容都放在正确的字段中,如果不单击“更新”,它就不会在产品页面上显示选项。

  • 如何从插件为WooCommerce创建属性?我只发现: 从这个问题 但这种方法需要某些产品的id。我需要生成一些未附加到任何产品的属性。

  • 每次根据其他几个字段的内容保存产品时,我都希望更新产品在我的商店中的属性。 然而,我正在努力让我的属性正确出现。 最初,我试图使用以下功能根据这个问题的公认答案更新产品: 这将添加到了分类法的可用术语列表中,但在我检查产品属性时,它们不可见。 接下来,我尝试了上述问题中第二个答案的变体: 这也无法更新产品的属性。 在这一点上,我不知道下一步该尝试什么。使用操作似乎是有效的,因为这个术语确实被添加到

  • 我在WooCommerce版本3+中创建了一个可变产品(父“产品”)。从一个WordPress插件中,我想以编程方式创建具有新属性值的产品变体(儿童“产品)。 变体属性已在WooCommerce中设置。 因此,每次创建一个变体时,都应以编程方式创建新属性的值,并在父变量product中设置新属性的值。 如何才能做到这一点呢?有可能吗? 更新:我已经为此编写了更多的代码行,并且尝试了许多方法来解决它

  • 我正在构建一个站点,其中以编程方式插入可变产品(带有产品变体)。我成功地学习了本教程: 插入WooCommerce产品 我需要的只是缺少的东西: 如何为可变产品设置默认属性值?可能吗?