php - 在 Woocommerce 3 中以编程方式创建产品时设置产品类型

标签 php wordpress class methods woocommerce

在 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();

如果用户选中“简单产品”或“可变产品”,我如何设置产品类型

感谢任何帮助。

最佳答案

WC_Product 类没有类型方法。产品类型由产品子类管理……

您将首先获得所需产品类型的 WC_Product 对象的空实例:

  1. 变量类型:$product = new WC_Product_Variable();
  2. 分组类型:$product = new WC_Product_Grouped();
  3. 外部类型:$product = new WC_Product_External();
  4. 简单类型:$product = new WC_Product_Simple();

然后您可以在所选产品类型上使用任何 WC_product 方法或在 $product 对象上使用相应的 Product 子类方法:

$product->set_name($data['product']['title']);
$product->set_status('publish');

然后您将保存产品(它会选择性地返回产品 ID):

$product_id = $product->save();

See: 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 个相关主题:

关于php - 在 Woocommerce 3 中以编程方式创建产品时设置产品类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53587200/

相关文章:

php - 使网站登录也适用于 WordPress

Java类和返回值

php - 获取时检查行是否存在的最快方法是什么?

php - 在自定义插件类中使用 Carbon Fields

javascript - 两列 - 一列固定

python从字符串调用类实例

c# - 如何从窗口内的另一个类调用方法?

javascript - 使用本地存储重置数据表状态

javascript - 按钮根本不起作用(Javascript)

javascript - 如何在谷歌图表中使用日期和时间