Woocommerce: изменить тип продукта в функции - PullRequest
2 голосов
/ 11 октября 2019

Мне нужно изменить тип продукта с simple на variable в функции.

Чем ближе я к этому, но не работает. Мне нужна помощь со строкой 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();
       }
    }
}

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Я думаю, вы должны удалить свой старый объектный термин, прежде чем применять новый. wp_remove_object_terms удалит старый объектный термин.

убедитесь, что ваш идентификатор продукта не является нулевым.

Вот простой пример того, как он работал и проверялся

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
0 голосов
/ 17 октября 2019
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') ) { 
           $productId = $product->get_id();  
           wp_remove_object_terms( $productId, 'simple', 'product_type', true );
           wp_set_object_terms( $productId, 'variable', 'product_type', true );

       }
    }
}

После перезагрузки простой страницы продукта продукт просто изменил свой тип на переменный. Проверено и подтверждено переходом на экран редактирования продукта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...