以编程方式导入WooCommerce产品时如何设置产品品牌?

时间:2020-03-17 13:54:58

标签: php wordpress woocommerce

我正在研究一个脚本,用于从第三者提供给我的纯文本文件中导入产品。 我已经成功使用WC_Product对象导入了产品,例如:

//new product
$objProduct = new WC_Product();
$objProduct->set_status("publish");
$objProduct->set_catalog_visibility('visible');
$objProduct->set_sku($product[SKU]);
//and so on
//edit existing product
$product_id = wc_get_product_id_by_sku($product[SKU]);
$objProduct = wc_get_product( $product_id );
$objProduct->set_status("publish");
//...

我面临的问题是我似乎找不到找到将品牌添加到产品中的方法。从csv文件导入时,我设法使用在woocommerce_product_import_inserted_product_object钩上运行的网络上找到的代码段来导入品牌:

public function process_import( $object, $data ) {
      if( isset( $data['product_brand'] ) ){
        wp_delete_object_term_relationships( $object->get_id(), 'product_brand' );
        $brands = explode( ',', $data['product_brand'] );
        foreach( $brands as $brand ) wp_set_object_terms( $object->get_id(), $brand, 'product_brand', true );
      }
        return $object;
    }

我尝试使用wp_set_object_terms,但收到“无效分类法”错误。而且我还尝试了不同的方法,但没有一种起作用,也没有关于它的文档。

这些是我尝试过的一些方法:

$objProduct->set_attributes(['product_brand' => $brandId]); 
$objProduct->set_attributes(['product_brand' => array($brandId) ]); 

$objProduct->set_meta_data(['product_brand' => $brandId]); 
$objProduct->set_meta_data(['product_brand' => array($brandId) ]); 

$objProduct->set_prop('product_brand', $brandId); 
$objProduct->set_prop('product_brand', array($brandId)); 

关于如何设置品牌的任何想法?我已经一无所知,被困在那里。

PS:我尝试同时使用ID和品牌名称(字符串)。

PS2:我的脚本在add_action( 'init', function(){//...})上运行,因此所有内容都应该可用。

谢谢!

1 个答案:

答案 0 :(得分:0)

我终于设法将自定义分类法添加到产品中。问题是在init挂接过程中未注册分类法。 我将其更改为wp_loaded挂钩。到那时,插件,主题等已准备就绪。 我用来设置它的方法是wp_set_post_terms