在Woocommerce中,我试图找到一种类似于WC_Product
方法set_name()
或set_status()
的方法,以将产品类型设置为简单或变体。
实际上,我像这样使用WC_Product
对象:
$product = new WC_Product;
$product->set_name($data['product']['title']);
$product->set_status('pending');
$product->save();
如果用户选中“简单产品”或“可变产品”,如何设置产品类型?
感谢您的帮助。
答案 0 :(得分:2)
WC_Product
类没有类型方法。产品类型由产品子类管理...
您首先将获得所需产品类型的WC_Product
对象的空实例:
$product = new WC_Product_Variable();
$product = new WC_Product_Grouped();
$product = new WC_Product_External();
$product = new WC_Product_Simple();
然后您可以在所选产品类型上使用任何WC_product
方法或$product
对象上相应的Product sub Class方法:
$product->set_name($data['product']['title']);
$product->set_status('publish');
然后您将保存产品(它将返回产品ID):
$product_id = $product->save();
请参阅: Create programmatically a product using CRUD methods in Woocommerce 3
产品变体
对于产品变体,这是不同的,因为它们始终是现有变量产品的一部分...
// Get the Variable product object (parent) from an existing product ID
$product = wc_get_product( $product_id );
// Define the variation data
$variation_post = array(
'post_title' => $product->get_title(),
'post_name' => 'product-'.$product_id.'-variation',
'post_status' => 'publish',
'post_parent' => $product_id,
'post_type' => 'product_variation',
'guid' => $product->get_permalink()
);
// Creating the product variation
$variation_id = wp_insert_post( $variation_post );
// Get an instance of the product variation Object
$variation = new WC_Product_Variation( $variation_id );
// Set existing product attribute values (defined in the variable product)
$variation->update_meta_data( 'attribute_'.'pa_color', 'blue' );
$variation->update_meta_data( 'attribute_'.'pa_size', 'xxl' );
# You can use any WC_Product allowed setter methods on the $variation object
$variation->set_regular_price( 25 );
$variation->set_price( 25 );
$variation->save();
请参阅这2个相关线程:
答案 1 :(得分:0)
通常在创建产品时设置类型:
$prod_data = [
'name' => 'A great product',
'type' => 'simple',
'regular_price' => '15.00',
'description' => 'A very meaningful product description',
'images' => [
[
'src' => 'https://shop.local/path/to/image.jpg',
'position' => 0,
],
],
'categories' => [
[
'id' => 1,
],
],
];
$woocommerce->post( 'products', $prod_data );
我不确定是否具有修改产品类型的功能,但是可以使用REST API对其进行修改:
$api_response = wp_remote_post( 'https://your-website/wp-json/wc/v2/products/{PRODUCT ID}', array(
//'method' => 'PUT',
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( 'KEY:SECRET' )
),
'body' => array(
'type' => 'simple', // just update the product type
// Options: simple, grouped, external and variable
// more params http://woocommerce.github.io/woocommerce-rest-api-docs/?shell#product-properties
)
) );
$body = json_decode( $api_response['body'] );
//print_r( $body );
if( wp_remote_retrieve_response_message( $api_response ) === 'OK' ) {
echo 'The product ' . $body->name . ' has been updated';
}
答案 2 :(得分:0)
尽管WooCommerce没有公开用于更改产品类型的API,但实际上WooCommerce确实实现了此功能,因为有必要使用诸如https:的管理页面上的“产品类型”选择框来支持更改产品类型。 //aaa.bbb.ccc/wp-admin/post.php?post=12345&action=edit。基本上,代码如下:
$classname = WC_Product_Factory::get_product_classname( $post_id, $product_type );
$product = new $classname( $post_id );
$product->save();
请注意,此处正在进行产品类型转换,因为ID == $ post_id的现有产品的产品类型可能与$ product_type不同。显然,可以使用与最初构造产品所用类型不同的产品构造函数。似乎很奇怪,但这就是当您在管理页面中更改产品类型时WooCommerce代码所做的事情。
REST API基本上以相同的方式实现产品类型的更改。