wordpress 如何在php中删除Woocommerce可变产品的变体

deikduxw  于 2023-01-25  发布在  WordPress
关注(0)|答案(2)|浏览(214)

我有一个可变的产品与5变化(基于单一属性-大小)。
因此:
产品"衬衫"-产品ID = 1234

  • 变异XS(超小)-变异id = 1235
  • 变异S(小)-变异id = 1236
  • 变异M(中等)-变异id = 1237
  • 变异L(大)-变异id = 1238
  • 变异XL(超大)-变异id = 1239

我想删除变体XL。
我能找到的最好的是(考虑到变体是'product_variation'类型的帖子):

<?php wc_delete_post(1239, true); ?>

这将删除变化和相关的元数据,但是,我仍然留下了大小属性在列表中的可能属性时,编辑产品(在属性选项卡)见所附的图片。

有没有人有一个php代码剪,将完全删除包括这个属性条目的产品变体。

unftdfkk

unftdfkk1#

您可以使用以下命令删除产品中的属性:

wp_remove_object_terms( product_id, term_slug_or_id, taxonomy_name );

更多信息:https://codex.wordpress.org/Function_Reference/wp_remove_object_terms

xuo3flqw

xuo3flqw2#

    • WooCommerce 3.0 +**

删除变体(源代码):

$variation_product = wc_get_product( 1239 );

$variation_product->delete( true );

//真=强制删除
//false =移动到垃圾桶

自动从变量产品中删除属性

屏幕截图中的大小值与您的 * Variable Product * 相关联,而 * 不是 * 单个变体。
因此,删除变体不会从父产品中删除关联的属性,因为您仍然可以选择使用这些属性创建新变体(以后仍然可以添加XL衬衫)。
但是,如果您希望在删除变体后自动删除关联的变体属性,下面是有关如何做到这一点的代码建议:

    • 从原始 * 变量 * 产品中删除所有变异属性:**

可变产品属性(之前):小、中、大、特大
变异属性:四十
可变产品属性(之后):小、中、长

// Variable Product
$product = wc_get_product( 1234 );
$product_attributes = $product->get_attributes(); // XS, S, M, L, XL

// XL Variation
$variation = wc_get_product( 1239 );
$variation_attributes = $variation->get_attributes(); // XL

// loop through Variation attributes (here: attribute is Size, values are XL)
foreach( $variation_attributes as $attribute => $value ){

    // Fetch attributes: Size => XS, S, M, L, XL
    $product_attribute_options = $product_attributes[ $attribute ]->get_options();

    // remove "XL" option
    remove_value_from_array( $product_attribute_options, $value );

    // reassign Size WITHOUT "XL" option
    $product_attributes[ $attribute ]->set_options( $product_attribute_options );

    // clone WC_Product_Attribute object to tell WooCommerce it has changed (otherwise save() won't work)
    $product_attributes[ $attribute ] = clone $product_attributes[ $attribute ];
}

// assign the new attributes object to main Variable product
$product->set_attributes( $product_attributes );
$product->save(); // save to DB

$variation->delete(); // finally, delete variation

// credit: https://stackoverflow.com/a/11982622
function remove_value_from_array(& $array, $value){
    foreach (array_keys($array, $value, true) as $key) {
        unset($array[$key]);
    }
}

除了克隆对象之外,您还可以创建一个新的WC_Product_Attribute()示例并手动分配所有必要的数据。

相关问题