首页 > 解决方案 > Woocommerce:在功能中更改产品类型

问题描述

我需要在函数中将产品类型从更改simplevariable

我越接近这个,但不工作。我需要有关代码第 2 行的帮助:

我必须使用$product->save();

// Line 1: GET THE PRODUCT     
$product = wc_get_product( get_the_id() );    

// Line 2: SET THE PRODUCT TYPE TO: 'variable'      
wp_set_object_terms( $product, 'variable', 'product_type' );

// Line 2: (I also tried this) SET THE PRODUCT TYPE TO: 'variable'
$product->set_product_type( 'variable' );

// Line 3: SAVE THE PRODUCT    
$product->save();

更新1:我试过这个,但不工作:

add_action( 'template_redirect', 'save_product_on_page_load' );

function save_product_on_page_load() {
    if ( get_post_type() === "product" ){
       $product = wc_get_product( get_the_id() );   
       if ( $product->is_type('simple') ) { 

           echo $productId = $product->get_id();    
           wp_remove_object_terms( $productId, 'simple', 'product_type' );
           wp_set_object_terms( $productId, 'variable', 'product_type', true );
           $product->save();
       }
    }
}

标签: functionwoocommercehook-woocommerce

解决方案


我认为您必须先删除旧对象术语,然后再应用新对象术语。wp_remove_object_terms将删除旧的对象术语。

确保您的产品 ID 不为空。

这是一个简单的例子,它工作并经过测试

function woo_set_type_function(){
   $product_id = 18; //your product ID
   wp_remove_object_terms( $product_id, 'simple', 'product_type' );
   wp_set_object_terms( $product_id, 'variable', 'product_type', true );
}
add_action('init', 'woo_set_type_function'); //init is for testing purpose only

推荐阅读